Aveți probleme cu atribuirea Nokogiri elementelor hash cheie

voturi
0

Am încercat să învețe Ruby pentru câteva luni și am practicarea razuire cu Nokogiri. Sunt răzuire Techcrunch.com și hapsân titlu, URL-ul și textul de previzualizare a fiecărui articol. Până în prezent am:

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 (povestiri) ia hash ca în argument și folosește-l pentru a inițializa articolul clasa astfel:

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

Când am rulat TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Eu iau:

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

După cum puteți vedea, creează opoziție cu titlul și adresa URL corespunzătoare pentru fiecare instanță a clasei de articol, dar păstrează atribuirea același text de previzualizare pentru fiecare instanță de articol. Ar trebui să existe 20 de articole, fiecare cu propriile sale „preview“, prin „preview“ Vreau să spun mic eșantion de articol te înainte să faceți clic pe link-ul pentru a citi articolul integral.

Ne pare rău pentru post lung. Sunt nou la acest lucru și nu pot par pentru a obține acest drept unul. Multumesc pentru orice ajutor în avans.

n00b -ruby

Întrebat 24/10/2019 la 13:03
sursa de către utilizator
În alte limbi...                            

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