我試圖建立一些內容從無限滾動頁面爬行。但是,我無法從第一個'休息'下面得到這些東西。我該怎麼做呢?如何抓取無限滾動頁面?
回答
無限滾動幾乎總是通過使用AJAX或相關技術在JavaScript中完成。因此,您的網絡爬蟲獲取HTML並解析它是不夠的;它必須下載並執行JavaScript,或至少掃描AJAX調用。
做一個完整的JavaScript執行可能是最好(即,將最有保證工作),但可能是最難做到的。
掃描AJAX請求的JavaScript和/或想執行AJAX調用,然後做DOM操作將可能是最簡單的(相對於滿JS執行)
謝謝。既然我是一個相對的新手,你能否給我一個如何做的例子? – user1319169
這不是一件簡單的事。但是,您已經編寫了抓取程序來接收HTML並解析它,讓它查找'script'標記,從'src'屬性獲取url,然後下載JS並掃描xmlhttp和什麼不是。 – cegfault
甚至掃描xmlhttp可能會變得複雜,因爲它可能被另一個函數調用。因此,讓我們來看一下xmlhttp的調用,它被$ .ajax使用,現在您必須返回到調用$ .ajax的地方,這可能是用戶定義的一個不同的函數。簡而言之,您必須遍歷整個調用堆棧才能找到正在下載的資源的URL,但更麻煩的是,該URL是動態構建的。爲了解決這個問題,谷歌依靠網站管理員添加特定的標記來允許抓取ajax頁面, – bigblind
一個Ajax請求的功能是任何其他要求沒有什麼不同。您只需提出請求,解析結果,並在那裏獲得數據。
如果您以前沒有做過,那可能需要一些經驗,但這聽起來像是一次很好的學習體驗。
這個答案應該與大比例的無限滾動相關,顯然你的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提出你的要求。
這個效果很好。 – chris
- 1. 使用無限滾動頁面的抓取工具
- 2. 如何正確抓取無限滾動的網頁?
- 3. jqgrid無限滾動頁面
- 4. Rails無盡頁面/無限滾動
- 5. 抓取時我無法移動頁面
- 6. 我想要無限滾動頁面ID
- 7. 無限滾動跳至頁面頂部
- 8. 如何下載無限滾動網頁
- 9. 無限滾動砌體頁面在滾動後失去格式
- 10. 滾動到頁面底部和無限滾動
- 11. 如何在SharePoint佈局頁面上實現無限滾動?
- 12. 靜態頁面的無限滾動它如何工作?
- 13. 如何在wordpress存檔頁面實現無限滾動
- 14. jquery無限滾動頁號
- 15. Extjs4無限滾動分頁
- 16. 使用python無限滾動的抓取網站
- 17. 如何做無限滾動。
- 18. 如何無限滾動waypoint.js?
- 19. jQuery抓取內容並水平滾動頁面
- 20. Facebook頁面抓取
- 21. 抓取html頁面
- 22. HTML頁面抓取
- 23. 抓取頁面塊
- 24. Ruby on Rails-滾動後如何抓取頁面上加載的數據?
- 25. Scrapy遞歸抓取無法抓取所有頁面
- 26. 無法抓取整個頁面
- 27. HtmlUnit無法抓取整個頁面
- 28. 無法抓取Reddit的NBA頁面
- 29. 如何滾動頁面?
- 30. 如何抓取登錄保護頁面?
我們必須知道如何實現無限滾動以回答您的問題。這可能是使用AJAX調用完成的。這意味着如果您的抓取工具是使用像Ruby這樣的服務器端語言編寫的,那麼您需要一個wqy來在該頁面上執行te javascript。 – bigblind
使用Ajax實現。 – user1319169