我想刮一些網頁,動態加載其組件。 此頁面有一個onload腳本,我可以在瀏覽器中輸入URL後3-5秒看到整個頁面。如何使機械等待網頁'全部'加載?
問題是,當我撥打br.open('URL')
時,響應是網頁在0秒。 HTML(我想要)和br.open('URL')
的結果之間有3-5秒的時間差。
我想刮一些網頁,動態加載其組件。 此頁面有一個onload腳本,我可以在瀏覽器中輸入URL後3-5秒看到整個頁面。如何使機械等待網頁'全部'加載?
問題是,當我撥打br.open('URL')
時,響應是網頁在0秒。 HTML(我想要)和br.open('URL')
的結果之間有3-5秒的時間差。
使用豐富的javascripts內容與機械化工作的網頁並不容易,但是根據不同的情況有很多方法可以獲得您想要的內容。
如果一些JSON的請求,以創建內容,那麼你可以調用URL和嘗試解析響應獲取內容,然後嘗試適當加入。
如果您需要使用某些表單,您可以創建一些表單字段並在機械化中設置它們的值。或者,只需編寫一個方法,將編碼POST
或GET
數據(引用特殊字符等),並用mechanize.browser.open
方法發送它們。
如果頁面有一些基於JavaScript的安全功能(如一些特殊的編碼,以形成張貼之前的數據),那麼你可以使用node.js像JavaScript應用服務器來處理一些JavaScript代碼塊。
但事實上,上面的一些選項並不容易,而且在使用這種項目的機械化之前,您必須考慮三次。
你遇到的問題是,網頁通過JavaScript引擎呈現在你的網頁瀏覽器中。但是,機械化本身無法自行執行JavaScript,因此,無論您等待多久,您都不會僅僅使用機械化來獲取缺少的HTML。
有關如何動態生成內容的更多信息,請查看此question。
非常感謝! :) – planetes853 2012-01-12 10:26:18
那麼有沒有其他的圖書館來瀏覽有動態呈現的網站? – planetes853 2012-01-12 10:28:03
請查看我答案中的鏈接。 – jcollado 2012-01-12 10:31:42