1. scrapy中介軟體的分類和作用
1.1 scrapy中介軟體的分類
根據scrapy執行流程中所在位置不同分為:
- 下載中介軟體
- 爬蟲中介軟體
1.2 scrapy中間的作用:預處理request和response物件
- 如對非200響應的重試(重新構造Request物件yield給引擎)
- 也可以對header以及cookie進行更換和處理
- 使用代理ip等
但在scrapy預設的情況下 兩種中介軟體都在middlewares.py一個檔案中
爬蟲中介軟體使用方法和下載中介軟體相同,且功能重複,常使用下載中介軟體
2. 下載中介軟體的使用方法:
接下來我們對騰訊招聘爬蟲進行修改完善,通過下載中介軟體來學習如何使用中介軟體 編寫一個Downloader Middlewares和我們編寫一個pipeline一樣,定義一個類,然後在setting中開啟
Downloader Middlewares預設的方法:
process_request(self, request, spider):
- 當每個request通過下載中介軟體時,該方法被呼叫。
- 返回None值:沒有return也是返回None,該request物件傳遞給下載器,或通過引擎傳遞給其他權重低的process_request方法
- 返回Response物件:不再請求,把response返回給引擎
- 返回Request物件:把request物件通過引擎交給排程器,此時將不通過其他權重低的process_request方法
process_response(self, request, response, spider):
- 當下載器完成http請求,傳遞響應給引擎的時候呼叫
- 返回Resposne:通過引擎交給爬蟲處理或交給權重更低的其他下載中介軟體的process_response方法
- 返回Request物件:通過引擎交給調取器繼續請求,此時將不通過其他權重低的process_request方法
在settings.py中配置開啟中介軟體,權重值越小越優先執行
定義實現隨機User-Agent的下載中介軟體
在middlewares.py中完善程式碼、
import random
from Tencent.settings import USER_AGENTS_LIST # 注意匯入路徑,請忽視pycharm的錯誤提示
class UserAgentMiddleware(object):
def process_request(self, request, spider):
user_agent = random.choice(USER_AGENTS_LIST)
request.headers['User-Agent'] = user_agent
# 不寫return
class CheckUA:
def process_response(self,request,response,spider):
print(request.headers['User-Agent'])
return response # 不能少!複製程式碼
在settings中設定開啟自定義的下載中介軟體,設定方法同管道
DOWNLOADER_MIDDLEWARES = {
'Tencent.middlewares.UserAgentMiddleware': 543, # 543是權重值
'Tencent.middlewares.CheckUA': 600, # 先執行543權重的中介軟體,再執行600的中介軟體
}複製程式碼
在settings中新增UA的列表
USER_AGENTS_LIST = [
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]複製程式碼