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
