Αντιμετωπίζετε πρόβλημα με την ανάθεση Nokogiri στοιχείο για να hash κλειδί

ψήφοι
0

Έχω προσπαθήσει να μάθει ρουμπίνι για μερικούς μήνες τώρα και είμαι εξάσκηση απόξεση με Nokogiri. Είμαι ξύσιμο Techcrunch.com και αρπάζοντας τον τίτλο, url και προεπισκόπηση κειμένου κάθε άρθρου. Μέχρι στιγμής έχω:

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 (ιστορίες) παίρνει το hash όπως στο επιχείρημα και το χρησιμοποιεί για να προετοιμαστεί το άρθρο κατηγορίας, όπως αυτό:

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

Όταν τρέχω TestScraper :: Scraper.new ( https://techcrunch.com ) .scrape_tech_crunch

Παίρνω:

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

Όπως μπορείτε να δείτε Δημιουργεί αντιρρήσεις με τον κατάλληλο τίτλο και τη διεύθυνση URL για κάθε στιγμιότυπο της κλάσης του άρθρου, αλλά διατηρεί την εκχώρηση το ίδιο κείμενο προεπισκόπηση σε κάθε περίπτωση το άρθρο. Θα πρέπει να υπάρχουν 20 είδη το καθένα με το δικό του «προεπισκόπηση», από «προεπισκόπηση» εννοώ το μικρό δείγμα του προϊόντος μπορείτε να πάρετε πριν κάνετε κλικ στο σύνδεσμο για να διαβάσετε το πλήρες άρθρο.

Συγγνώμη για το μεγάλο θέση. Είμαι νέος σε αυτό και δεν φαίνεται να μπορεί να πάρει αυτό το δικαίωμα. Ευχαριστώ για οποιαδήποτε βοήθεια εκ των προτέρων.

-ruby n00b

Δημοσιεύθηκε 24/10/2019 στις 12:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Το θέμα έχει σας οφείλεται στο γεγονός ότι

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

επιλέγει το ίδιο κόμβο για κάθε ιστορία, από τη στιγμή που θα ζητήσει από @docτις οποίες είναι η παγκόσμια έγγραφο.

Αντί να προσπαθήσουμε να βρούμε την κορυφή πλέον κοινό κόμβο, και ταξιδεύουν κάτω από εκεί:

@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

Αν κάποια από τις χρησιμοποιούμενες μεθόδους εγείρει ερωτήματα ρίξτε μια ματιά στο σκονάκι Nokogiri . Αν έχετε οποιαδήποτε απορία μετά από αυτό μην φοβάστε να ρωτήσετε γι 'αυτό στα σχόλια.

Απαντήθηκε 24/10/2019 στις 13:48
πηγή χρήστη

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