爬蟲總結9
1.
在spider中構造請求物件
scrapy.Request(url,
callback=回撥函式,
method=‘GET’,
body={post_data},
headers={不能寫cookie},
cookies={cookies_dict},
meta={向callback函式傳遞資料},
dont_filter=False) # 預設過濾重複請求
# 專門傳送post請求
scrapy.FormRequest(url,
# 沒有method、body引數,
formdata={post_data},
# 其他引數和Request都一樣)
2.
meta屬性的使用
response.meta = request.meta # 引擎中
在構造請求物件時:
scrapy.Request(url,
callback=func,
meta={‘item’:item}) # 傳遞item
在指定的解析函式func中:
item = response.meta[‘item’] # 取出傳遞的item
3.
items.py的BaseItem
# 提前定義欄位,防止手誤;對擴充套件元件支撐
在items.py中:
欄位 = scrapy.Field()
在spider.py中:
from 專案名.items import BaseItem類
item = BaseItem類()
item[‘欄位’] = … # 例項化後像字典一樣使用
4.
起始url需要登陸後才能訪問:
重寫scrapy.Spider.start_requests函式
# scrapy.Spider.start_requests函式對起始url構造request並返回
5.
scrapy能夠自動傳遞cookies,做狀態保持
scrapy能夠自動傳送跳轉的請求
6. pipelines.py管道
process_item(item, spider) # spider中返回一個數據時,該函式被呼叫 # 該函式用來具體的處理或儲存資料 # 一定return item,其他權重較低的管道類同名函式才能接收到資料item # 引數spider就是觸發process_item函式執行的那個爬蟲類物件 # 可以利用spider.name來區分不同的爬蟲,進而做不同的處理 # 管道類中必須有該函式 open_spider(spider):爬蟲開始時僅執行一次 close_spider(spider):爬蟲結束時僅執行一次 # 多爬蟲共用一個管道 # 一個爬蟲使用多個管道 # 如果process_item函式把item儲存到mongodb中,return的item將攜帶mongodb中的_id欄位 管道使用需要在settings.py中設定開啟 # 左邊是位置,右邊是權重值(int) # 權重值越小,權重就越高,越優先執行