2

Nokogiri を使用して HTML を解析しようとしていますが、問題が発生しています。各「employerReview」クラスを調べて、「長所」と「短所」の下でコンテンツをキャプチャしたいと思います。

最初の部分を実行するだけで問題が発生します。1 つのアイテムをコンソールに戻すことです。

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

1 つの問題は、CSS を必要とするメソッドに XPath アクセサーを使用していることです。

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

search代わりに、またはxpathを XPath に使用できます。

ただし、必要なノードは見つかりません。簡単なテストは、それらが存在しないことを示しています:

doc.css("#empReview_2320868")

何かを返す必要がありますが、 を返します。これは[]、ID がどのタグにも存在しないことを意味します。

于 2013-04-10T16:19:20.227 に答える
0

XPath の代わりに CSS を使用して、探しているデータを見つける方法の 1 つを次に示します。

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 に答える
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

Pros -指定された xpath にはandの部分が含まれていCons -ます。それが必要でない場合は、xpath を次のように変更できます。

//div[@class="employerReview"]//div[@class="description"]/p[position()<3]/tt
于 2013-04-10T16:43:35.230 に答える