Ayant du mal à affecter Nokogiri élément à hachage de clé

voix
0

J'ai essayé d'apprendre Ruby pendant quelques mois maintenant et je pratique le grattage avec Nokogiri. Je suis gratter Techcrunch.com et saisir le titre, url et aperçu du texte de chaque article. Jusqu'à présent, j'ai:

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 (histoires) prend le hachage comme dans l'argument et l'utilise pour initialiser la classe de l'article comme ceci:

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

Quand je lance TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Je reçois:

[#<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/>

Comme vous pouvez le voir crée un objet avec le titre approprié et URL pour chaque instance de la classe d'article, mais il garde assignant le même texte d'aperçu à chaque instance de l'article. Il devrait y avoir 20 articles chacun avec son propre « aperçu », par « preview » Je veux dire le petit échantillon de l'article que vous obtenez avant de cliquer sur le lien pour lire l'article complet.

Désolé pour le long courrier. Je suis novice en la matière et ne peut pas sembler obtenir ce bon. Merci d'avance pour toute aide.

-ruby n00b

Créé 24/10/2019 à 13:03
source utilisateur
Dans d'autres langues...                            

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