2

我正在尝试使用 Nokogiri 解析一些 HTML,但遇到了一些问题。我想通过每个“employerReview”课程并在“优点”和“缺点”下捕获内容。

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

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
4

3 回答 3

1

一个问题是您将 XPath 访问器用于需要 CSS 的方法:

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

您可以使用searchorxpath代替 XPaths。

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

doc.css("#empReview_2320868")

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

于 2013-04-10T16:19:20.227 回答
0

您已传递xpathcss选择器。

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 -andCons -部分,如果这不是您想要的,您可以将 xpath 更改为

//div[@class="employerReview"]//div[@class="description"]/p[position()<3]/tt
于 2013-04-10T16:43:35.230 回答
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
于 2013-04-10T16:21:14.360 回答