Heeft u problemen met het toewijzen van Nokogiri Element om de belangrijkste hash

stemmen
0

Ik heb geprobeerd om Ruby te leren voor een paar maanden nu en ik ben het beoefenen van schrapen met Nokogiri. Ik schrapen Techcrunch.com en grijpen de titel, url en een voorbeeld tekst van elk artikel. Tot dusver heb ik:

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 (verhalen) neemt de hash als in argument en gebruikt het om te initialiseren het artikel klasse als volgt:

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

Wanneer ik TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Ik krijg:

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

Zoals je kunt zien Het creëert object met de juiste titel en url voor elk exemplaar van het artikel klasse, maar het houdt het toewijzen van hetzelfde voorbeeld tekst aan elk artikel instantie. Er moet 20 artikelen met elk een eigen preview, door preview bedoel ik de kleine steekproef van het artikel dat je voordat je op de link klikt om het volledige artikel te lezen.

Sorry voor de lange post. Ik ben nieuw op dit en kan niet schijnen om dit goed te krijgen. Bedankt voor alle hulp op voorhand.

-ruby n00b

De vraag is gesteld op 24/10/2019 om 13:03
bron van user
In andere talen...                            

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