2012-10-21 69 views
5

我試圖建立一些內容從無限滾動頁面爬行。但是,我無法從第一個'休息'下面得到這些東西。我該怎麼做呢?如何抓取無限滾動頁面?

+1

我們必須知道如何實現無限滾動以回答您的問題。這可能是使用AJAX調用完成的。這意味着如果您的抓取工具是使用像Ruby這樣的服務器端語言編寫的,那麼您需要一個wqy來在該頁面上執行te javascript。 – bigblind

+0

使用Ajax實現。 – user1319169

回答

7

無限滾動幾乎總是通過使用AJAX或相關技術在JavaScript中完成。因此,您的網絡爬蟲獲取HTML並解析它是不夠的;它必須下載並執行JavaScript,或至少掃描AJAX調用。

做一個完整的JavaScript執行可能是最好(即,將最有保證工作),但可能是最難做到的。

掃描AJAX請求的JavaScript和/或想執行AJAX調用,然後做DOM操作將可能是最簡單的(相對於滿JS執行)

+0

謝謝。既然我是一個相對的新手,你能否給我一個如何做的例子? – user1319169

+1

這不是一件簡單的事。但是,您已經編寫了抓取程序來接收HTML並解析它,讓它查找'script'標記,從'src'屬性獲取url,然後下載JS並掃描xmlhttp和什麼不是。 – cegfault

+0

甚至掃描xmlhttp可能會變得複雜,因爲它可能被另一個函數調用。因此,讓我們來看一下xmlhttp的調用,它被$ .ajax使用,現在您必須返回到調用$ .ajax的地方,這可能是用戶定義的一個不同的函數。簡而言之,您必須遍歷整個調用堆棧才能找到正在下載的資源的URL,但更麻煩的是,該URL是動態構建的。爲了解決這個問題,谷歌依靠網站管理員添加特定的標記來允許抓取ajax頁面, – bigblind

0

一個Ajax請求的功能是任何其他要求沒有什麼不同。您只需提出請求,解析結果,並在那裏獲得數據。

如果您以前沒有做過,那可能需要一些經驗,但這聽起來像是一次很好的學習體驗。

3

這個答案應該與大比例的無限滾動相關,顯然你的milage可能會有所不同。

大多數無限滾動器通過使用偏移位置來工作,只需抓取偏移量中的下一個項目塊。這與尋呼可能如何通過跳過

< Previous 1 2 3 4 5 Next >相同,除了偏移量被存儲並用於發出新的請求。考慮到這一點,如果您在Chrome或Firefox中打開開發人員工具欄並查看網絡選項卡,則很可能會在您向下滾動時看到請求。

只看該請求的參數,你很可能會看到類似

GET /api/v2/books?offset=100=count=10 
GET /api/v2/books?offset=110=count=10 
GET /api/v2/books?offset=120=count=10 

知道了這一點,你可以很輕鬆地實際上忽略目標HTML刮,只是用自己的內部目標的URI提出你的要求。

+0

這個效果很好。 – chris