scrapy爬取頁面不完全的解決辦法


最近在使用scrapy來制作爬蟲以爬取一些網站上的信息,但是卻出現了一個很奇怪的問題,即在網頁中打開待爬取的URL,並在網頁源代碼中定位了某些待爬取的元素,但是當使用scrapy爬取數據時,卻發現報錯了,而錯誤竟然是所爬取到的網頁中並沒有我在瀏覽器中看到的元素,即對於同一個URL,爬取到的頁面和我在瀏覽器中打開所看到的頁面不一樣!
在反復確認CSS類選擇器沒寫錯,爬蟲所爬取的URL沒有被重定向到另外的頁面后,我發現事情並不簡單。
在這里插入圖片描述
而后我機緣巧合之下在不修改任何代碼的情況下重新運行了一遍,卻發現又爬取成功了,然后再試一次,又報錯了,這時候我就知道,肯定是爬取到的頁面是沒有加載完全的頁面了

頁面沒加載完全的情況,我首先想到的有兩種可能:
其一,部分數據是在網頁加載中由js動態寫入的,即在第一次請求中部分數據傳給了js並由js在前端進行處理后再顯示到頁面上;
其二,便是網頁數據采用了異步加載,在爬取網頁的時候部分數據還沒加載進來。

而基於scrapy是一個成熟的爬蟲框架的考量,我想第一種情況應該不會出現,畢竟爬蟲完全可以等頁面初始化完成后再進行爬取,但是對於第二種情況卻無法預先控制,因為數據加載是異步的。

基於如上考慮,那便直接考慮第二種情況,因此可以通過在瀏覽器控制台的Network中查看所有發送的請求,查看是否自己所需的數據是被異步加載了。如下圖,可以對每一條請求的Response進行查看,手動查看是否返回了自己所需的信息。
在這里插入圖片描述
對於我的情況,果不其然,如上圖所示,便被我找到了整個異步請求的返回的json格式的數據,其中包含了所有我需要的信息,我甚至不需要再去對網頁進行爬取,只需如下圖所示,查看該請求的Header,可以看到該異步請求的請求格式,即圖中的Request URL
在這里插入圖片描述
將獲得的Request URL復制到瀏覽新窗口中打開,可以看到如下圖,能夠訪問到json格式的返回數據,這表明網站並沒有對這種請求進行攔截,這也使得我不需要再去從頁面上爬取數據了,我只需直接構造相應的URL然后分析返回的json數據即可,大功告成!
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM