爬蟲過程中遇到的防爬措施
阿新 • • 發佈:2018-11-03
1.用scrapy爬取趕集網租房資訊時,由於訪問頻繁,需要通過驗證碼才能訪問頁面;
解決方案:
網站通過使用者的Cookie資訊對使用者進行識別與分析,所以要防止目標網站識別我們的會話資訊。
在Scrapy中,我們可以在爬蟲專案的setting.py檔案中進行設定
將setting.py中的下面兩行程式碼裡的
COOKIES_ENABLED = False 的註釋去掉即可。
2.爬蟲過程中遇到重定向問題
爬取趕集網次數可能太多,爬蟲時網址被重定向到驗證碼頁面。
2018-08-31 16:59:55 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://callback.ganji.com/firewall/valid/2093665982.do?namespace=ganji_zufang_detail_pc&url=http%3A%2F%2Fbj.ganji.com%2 Ffang1%2F3541105246x.htm%3Fadtype%3D3> from <GET http://bj.ganji.com/fang1/3541105246x.htm?adtype=3>
解決方法:
1.在Request中將scrapy的dont_filter=True
,因為scrapy是預設過濾掉重複的請求URL;
2.新增headers;
3.
2.設定下載延時
部分網站通過分析我們的爬取頻率對爬蟲進行禁止或限制,所以我們需要控制爬取時間間隔。
在Scrapy中同樣是在setting.py檔案中進行設定。
在這裡,我設定爬取間隔為 0.7。
3.設定使用者代理池
在setting.py中新增使用者代理池
新增好使用者代理池之後,還需要建立下載中介軟體。在C:/Mycrawl/Mycrawl下新建Myuseragent.py檔案,在裡面編輯
import random from Mycrawl.settings import UAPOOL from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware class MyUAmid(UserAgentMiddleware): def __init__(self, user_agent=''): self.user_agent = user_agent def process_request(self, request, spider): Myua = random.choice(UAPOOL) print('當前使用的User-Agent是%s'%Myua) request.headers.setdefault('User-Agent', Myua)
然後在settings.py中將該檔案設定為爬蟲專案的下載中介軟體,
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
#'Mycrawl.middlewares.MycrawlDownloaderMiddleware': 543,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':2,
'Mycrawl.MyUserAgent.MyUAmid':1,
}
其中的 DOWNLODER_MIDDLEWARES 就是下載中介軟體的意思。
設定好之後就可以執行爬蟲檔案了。
4.訪問頻率大,網頁爬取需要驗證碼驗證
5.其他方式