我正在尝试使用Nokogiri解析一些HTML并且遇到了一些问题。我想通过每个“雇主评论”课程,并在“专业”和“缺点”下捕捉内容。
我在完成第一部分时遇到了麻烦:让一个项目返回控制台。
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
答案 0 :(得分:1)
一个问题是,您正在为需要CSS的方法使用XPath访问器:
doc.css('//*[@id="empReview_2320868"]/div[1]/p[1]/tt')
您可以使用search
或xpath
代替XPath。
但是找不到你想要的节点。一个简单的测试表明它们不存在:
doc.css("#empReview_2320868")
应返回一些内容,但会返回[]
,这意味着任何代码中都不存在ID。
答案 1 :(得分:0)
以下是使用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
答案 2 :(得分:0)
您已将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