Hai problemi assegnando Nokogiri Elemento chiave di hash

voti
0

Ho cercato di imparare rubino per un paio di mesi e sto praticando raschiando con Nokogiri. Sto raschiando Techcrunch.com e afferrando il testo del titolo, URL e l'anteprima di ogni articolo. Finora ho:

require 'nokogiri'
require 'open-uri'

class TestScraper::Scraper
@doc = Nokogiri::HTML(open(https://techcrunch.com)


  def scrape_tech_crunch
    articles = @doc.css(h2.post-block__title).css(a)
    top_stories = articles.each do |story|
      stories = {
        :title => story.children.text.strip,
        :url => story.attribute(href).value,
        :preview => @doc.css(div.post-block__content).children.first.text
      }
      TestScraper::Article.new(stories)
    end
  end
end

TestScraper :: Article.new (storie) batte un hash come in argomento e lo utilizza per inizializzare la classe articolo in questo modo:

class TestScraper::Article
  attr_accessor :title, :url, :preview 

  @@all = []

  def initialize(hash)
    hash.each do |k, v|
      self.send #{k}=, v
    end
    @@all << self
  end

  def self.all
    @@all
  end
end

Quando eseguo TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Ottengo:

[#<TestScraper::Article:0x00000000015f69e0
  @preview=
   \n\t\tSecurity researchers have found dozens of Android apps in the Google Play store serving ads to unsuspecting victims as part of a money-making scheme. ESET researchers found 42 apps conta
ining adware, \t,
  @title=
   Millions downloaded dozens of Android apps on Google Play infected with adware,
  @url=
   https://techcrunch.com/2019/10/24/millions-dozens-android-apps-adware/>,
 #<TestScraper::Article:0x00000000015f5658
  @preview=
   \n\t\tSecurity researchers have found dozens of Android apps in the Google Play store serving ads to unsuspecting victims as part of a money-making scheme. ESET researchers found 42 apps conta
ining adware, \t,
  @title=Netflix launches $4 mobile-only monthly plan in Malaysia,
  @url=
   https://techcrunch.com/2019/10/24/netflix-malaysia-mobile-only-cheap-plan/>

Come si può vedere Crea oggetto con il titolo e l'URL appropriato per ogni istanza della classe articolo, ma mantiene l'assegnazione dello stesso testo di anteprima per ogni istanza articolo. Ci dovrebbe essere di 20 articoli ciascuno con la propria anteprima, di preview intendo il piccolo campione di questo articolo che si ottiene prima di fare clic sul link per leggere l'articolo completo.

Ci scusiamo per il lungo post. Sono nuovo a questo e non riesco a ottenere questo diritto. Grazie per qualsiasi aiuto in anticipo.

n00b -ruby

È pubblicato 24/10/2019 alle 13:03
fonte dall'utente
In altre lingue...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more