Nokogiri исключить HTML класс - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь вычеркнуть имена всех людей, которые прокомментировали сообщение в нашей группе на Facebook. Я скачал файл локально и могу вычеркнуть имена людей, которые прокомментировали, а также людей, которые ответили на эти комментарии. Мне нужны только исходные комментарии, а не ответы ... кажется, что я должен исключить класс UFIReplyList, но мой код все еще извлекает все имена. Любая помощь будет принята с благодарностью. Спасибо!

require 'nokogiri'
require 'pry'

class Scraper
  @@all = []

  def get_page
    file = File.read('/Users/mark/Desktop/raffle.html')
    doc = Nokogiri::HTML(file)
    # binding.pry

    doc.css(".UFICommentContent").each do |post|
      # binding.pry
      author = post.css(".UFICommentActorName").css(":not(.UFIReplyList)").text

      @@all << author
    end

    puts @@all
  end
end

Scraper.new.get_page

1 Ответ

0 голосов
/ 29 августа 2018

Обходите предков для каждого элемента .UFICommentActorName, чтобы отклонить тех, которые содержатся в элементе .UFIReplyList.

@authors_nodes = doc.css(".UFICommentActorName").reject do |node|

  # extract all ancestor class names; 
  # beware of random whitespace and multiple classes per node
  class_names = node.ancestors.map{ |a| a.attributes['class'].value rescue nil }
  class_names = class_names.compact.map{ |names| names.split(' ') }
  class_names = class_names.flatten.map(&:strip)

  # reject if .UFIReplyList found
  class_names.include?('UFIReplyList')

end

@authors_nodes.map(&:text)
...