我试图用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')
您可以使用search
或xpath
作为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