1. 程式人生 > >爬蟲總結9

爬蟲總結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)
	# 權重值越小,權重就越高,越優先執行