如何在Ruby中使用Nokogiri解析HTML



我试图用Nokogiri解析一些HTML,我有一些问题。我想浏览每个"雇主评论"类,并在"优点"one_answers"缺点"下捕获内容。

我在做第一部分时遇到了麻烦:让一个项目返回到控制台。

require 'open-uri'
require 'nokogiri'

doc = Nokogiri::HTML(open('http://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm'))
doc.css('//*[@id="empReview_2320868"]/div[1]/p[1]/tt').each do |link|
puts link.content
end

一个问题是,您正在为需要CSS的方法使用XPath访问器:

doc.css('//*[@id="empReview_2320868"]/div[1]/p[1]/tt')

您可以使用searchxpath作为xpath。

这并没有找到你想要的节点。一个简单的测试表明它们不存在:

doc.css("#empReview_2320868")

应该返回一些东西,但它返回[],这意味着ID不存在于任何标签

下面是一种使用CSS而不是XPath更接近于查找所需数据的方法:

require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open('http://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm'))
doc.css('div.employerReview > div.description > p > strong').each do |item|
  puts item.content
  item.parent.css('tt').each do |details|
    puts details.content
  end
end

您已将xpath传递给css选择器。

require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open('http://www.glassdoor.com/Reviews/Microsoft-Reviews-E1651.htm'))
ps = doc.xpath('//div[@class="employerReview"]//div[@class="description"]/p[position()<3]')
ps.map{|p| p.text.strip}.each_slice(2) do |pros, cons|
  puts pros
  puts cons
end

指定的xpath包含了Pros -Cons -部分,如果这不是您想要的,您可以将xpath更改为

//div[@class="employerReview"]//div[@class="description"]/p[position()<3]/tt

相关内容

  • 没有找到相关文章

最新更新