scrapy深入爬取遇到的問題及解決方法


1.小例子思路草圖

 

 

 

2.遇到的問題

2.1 異端請求(容易忽略)

在跳轉詳情頁時候,請求的域名發生了變化,scrapy會給你過濾掉這個url

 

2.1.1.解決

更改spider.py

allowed_domains= ['www.xxx.com']
allowed_domains= ['www.xxx.com','www.ccc.com']

 使它符合你的請求url

2.1.2.添加參數

yield scrapy.Request(url=url, 
                               callback=self.parse,
                               dont_filter=True)

#添加dont_filter=True在跳轉時

2.1.2爬取信息重復

因為先自定義item來存儲字段信息,最后待所有字段保存完畢,再yield給scrapy的items來處理

所以這之間使用meta來傳遞數據,就是這里出現問題,導致數據重復。

原因:

由於結構限制,所有字段共用一個item,而scrapy是異步請求,上一層分類url不斷傳遞時,下一層具體信息的代碼多線程同步執行,

meta傳來的item是引用(淺拷貝),所以會重復信息,它不像使用requests模塊是單線層,從上到下執行完畢再循環。

解決:

 

form copy import  deepcopy 

 

  

 

利用 deepcopy來傳遞meta信息,每一個線程都會單獨為其開辟空間,規避重復問題

 

2.1.3 頁碼js生成

在返回的element無下一頁信息

解決:

在response.body.decode()中使用正則在js中匹配

通過當前頁和總頁數的判斷大小

設定下一頁跳轉url

 

 

 

 

 

       

 


免責聲明!

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



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