您有2個選項這裏:
開關純HTTP刮一些工具,它支持JavaScript的評價,諸如水豚(與proper driver選擇)。這可能會很慢,因爲你在底層運行無頭瀏覽器,加上你必須設置一些超時或以另一種方式來確定你感興趣的文本塊在加載之前已經被加載。
第二個選擇是使用Web Developer控制檯並找出如何加載這些文本塊(哪些AJAX調用,它們的參數等)並在您的刮板中實現它們。這是更先進的方法,但更高性能的,因爲你不會做任何額外的工作,就像你在選項完成的1
有一個愉快的一天!
UPDATE:
你上面的代碼不能正常工作,因爲響應是HTML代碼包裹在JSON對象,而你試圖解析它作爲一個原始的HTML。它看起來像這樣:
{
"error": 0,
"msg": "request successful",
"paidDocIds": "some ids here",
"itemStartIndex": 20,
"lastPageNum": 50,
"markup": 'LOTS AND LOTS AND LOTS OF MARKUP'
}
你需要的是解包JSON,然後解析爲HTML:
require 'json'
json = JSON.parse(open(url).read) # make sure you check http errors here
html = json['markup'] # can this field be empty? check for the json['error'] field
doc = Nokogiri::HTML(html) # parse as you like
我也使用open-uri
advise you against,因爲你的代碼可能,如果你使用動態URL,因爲變得脆弱的方式open-uri
的作品(閱讀鏈接的文章的詳細信息),並使用良好和更多功能的庫,如HTTParty和RestClient。
更新2:最小的工作劇本對我來說:
require 'json'
require 'open-uri'
require 'nokogiri'
url = 'http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Delhi+%2F+NCR&search=Pandits&where=Delhi+Cantt&catid=1195&psearch=&prid=&page=2'
json = JSON.parse(open(url).read) # make sure you check http errors here
html = json['markup'] # can this field be empty? check for the json['error'] field
doc = Nokogiri::HTML(html) # parse as you like
puts doc.at_css('#newphoto10').attr('title')
# => Dr Raaj Batra Lal Kitab Expert in East Patel Nagar, Delhi
我在控制檯檢查的話......所有Ajax調用具有相同的參數頁,除了沒有......只有這改變的事情是沒有頁:我已經將頁面號放在佔位符中並將其放在循環中 –
如果您在瀏覽器中打開此URL:http://www.justdial.com/functions/ajxsearch.php?national_search=0&act=pagination&city=Delhi+%2F+NCR&search = Pandits&where = Delhi + Cantt&catid = 1195&psearch =&prid =&page = 2'它顯示了一些JSON響應,似乎工作正常,不是嗎? –
我的實際網址是http://www.justdial.com/Delhi-NCR/Pandits-%3Cnear%3E-delhi/ct-1195我在我的問題中提到的URL我從控制檯得到它 –