1. 程式人生 > >爬蟲過程中遇到的防爬措施

爬蟲過程中遇到的防爬措施

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.其他方式