常用的反反爬策略
通常防止爬蟲被反主要有以下幾策略:
- 動態設置User-Agent(隨機切換User-Agent,模擬不同用戶的瀏覽器信息。)
- 禁用cookies(也就是不啟用cookies middleware,不向server發送cookies,有些網站通過cookies的使用發現爬蟲,可以通過COOKIES_ENABLED控制cookies middleware的開啟和關閉)
- 設置延遲下載(防止訪問過於頻繁,設置為2s甚至更高)
- Google Cache和Baidu Cache:如果可能的話,使用谷歌或百度等搜索引擎服務器頁面緩存的頁面數據。
- 使用IP池:VPN和IP代理。
scrapy的logging設置
scrapy中Log Levels分為五個級別:
CRITICAL:----嚴重錯誤
ERROR:------一般錯誤
WARNNING---警告信息
INFO------------一般信息
DEBUG--------調試信息
通過setting.py文件,可以進行一下設置,用來配置logging:
LOG_ENABLED:默認為True,啟用logging
LOG_ENCODING:默認為utf-8,logging使用編碼
LOG_FILE:默認為None,在當前目錄下創建logging輸出文件的文件名
LOG_LEVEL:默認為DEBUG,log的最低級別
LOG_STDOUT:默認為False,如果為True時,進程所有標准輸出(及錯誤)都將被重定向到log中,例如,執行print("hello"),將會在scrapy的log中顯示。
一般情況下,實際設置以下內容就足夠:
LOG_FILE=“文件名.log”
LOG_LEVEL="INFO"
Request/Response的重要參數
Request中的主要參數:
url: 就是需要請求,並進行下一步處理的url
callback: 指定該請求返回的Response,由哪個函數處理
method: 請求一般不需要指定,默認為GET方法,可以設置為“GET”,“POST”,"PUT"等,且保證字符串大寫。
headers:請求時,包含的頭文件。一般不需要。
meta: 比較常用。在不同請求之間傳遞數據時使用,字典dict類型。
encoding: 使用默認的utf-8就行。
dont_filter: 表明該請求不由調度齊齊過濾。這是當你想使用多次執行相同請求時,忽略重復的過濾。默認為False.
Response中的重要參數:
status: 響應碼
_set_body(body): 響應體
_set_url(url):響應url
Scrapy發送POST請求
scrapy中一般使用如下方法發送POST請求:
yield scrapy.FormRequest(url, formdata, callback)
如果希望程序執行一開始就發送POST請求,可以重寫Spider類的start_requests(self)方法,並且再調用start_url中的url
使用FormRequest.from_response()方法,模擬用戶登錄。
通常網站通過實現對某些表單字段(如數據或登錄界面中的認證令牌等)的預填充。使用scrapy抓取網頁時,如果需要預填充或重寫用戶名、用戶密碼等表單字段時,
可以使用FormRequest.from_response()方法實現。