Gondjai hozzárendelése Nokogiri Element hash kulcs

szavazat
0

Próbáltam tanulni rubin pár hónapja, és én gyakorló kaparás Nokogiri. Én kaparás Techcrunch.com, és megragadta a címet, url és megtekintett szövegét cikket. Eddig:

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 (elbeszélések) veszi a hash mint érvet, és arra használja, hogy inicializálja a cikk osztály valahogy így:

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

Amikor futtatom TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Kapok:

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

Amint láthatjuk teremt kifogást a megfelelő címet és url minden esetben a cikk osztály, de megtartja hozzárendelését azonos megtekintett szöveg minden cikket példány. Ott kell lennie 20 cikket mindegyik saját „preview”, az „előnézet” Úgy értem, a kis minta a cikk kapsz, mielőtt rákattint a linkre, hogy olvassa el a teljes cikket.

Elnézést a hosszú post. Új vagyok ebben, és nem úgy tűnik, hogy ez az egy van. Köszönet minden segítséget előre.

-ruby n00b

A kérdést 24/10/2019 12:03
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

A kérdés az, amelynek oka az a tény, hogy

@doc.css("div.post-block__content").children.first.text

kiválasztja az azonos csomópont minden történet, mert hívod azt @doc, ami a globális dokumentumot.

Ehelyett próbálja megtalálni a legjobb leggyakoribb csomópont, és az utazás le onnan:

@doc.css('.post-block').map do |story|
  # navigate down from the selected node
  title   = story.at_css('h2.post-block__title a')
  preview = story.at_css('div.post-block__content')

  TestScraper::Article.new(
    title:   title.content.strip,
    href:    title['href'],
    preview: preview.content.strip
  )
end

Ha bármely használt módszerek kérdéseket vet egy pillantást a Nokogiri puskát . Ha bármilyen kérdése van azt követően, hogy ne féljen kérdezni, hogy a hozzászólások.

Válaszolt 24/10/2019 13:48
a forrás felhasználó

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