nokogiri возвращает пустое значение при правильном xpath - PullRequest
1 голос
/ 20 декабря 2009

запустите следующее, и оно должно вернуть название компании. Xpath работает в Firefox и возвращает название компании. однако в nokogiri этого не происходит, он возвращает пустую строку!

require 'rubygems'
require 'nokogiri'
require 'open-uri'

 doc = Nokogiri::HTML(open('http://www.careerbuilder.com/JobSeeker/Jobs/JobDetails.aspx?IPath=QHK
CV&ff=21&APath=2.21.0.0.0&job_did=J3G71D73BM9HCK1M84Z&cbRecursionCnt=1&cbsid=6d2aee1515ed404b8306d1a583592cd4-314600403-JQ-5'))
companyname = doc.xpath("/html[1]/body[1]/div[1]/div[1]/form[1]/div[1]/table[1]/tbody[1]/tr[2]/td[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]/td[2]").to_s

puts companyname

1 Ответ

0 голосов
/ 20 декабря 2009

Ваш xpath неверен :)

Вы должны пропустить часть tbody, это генерируется браузером, но not nokogiri!

doc.xpath("/html[1]/body[1]/div[1]/div[1]/form[1]/div[1]/table[1]/tr[2]/td[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[2]/table[1]/tr[1]/td[2]").to_s

NB: Кроме того, ваш xpath будет более устойчивым к изменениям HTML-страницы, если вы будете использовать любые атрибуты class или id для выбранных узлов, а не полный путь. Например, вы можете использовать

doc.xpath("//div[@class='job_desc'][1]/table[1]/tr[1]/td[2]")

или даже просто используйте селектор CSS

doc.css("div.job_desc td")[1]
...