爬蟲如何避免被禁止

一、禁止Cookie

有的網站會通過Cookie來識別用戶,我們可以禁用Cookie使對方網站無法識別出我們的對話信息,達到避免被禁止。

在Scrapy的項目中的settings.py 文件中找到代碼並修改如下:

# Disable cookies (enabled by default)
COOKIES_ENABLED = False

二、設置下載延時

有的網站會通過我們對網站的爬取頻率來分析,如果頻率過快則爬取會被禁止。我們可以通過控制爬取時間間隔來避免禁止。

修改setting.py 中的代碼如下:

# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0.8

0.8代表設置的時間間隔,表示0.8秒,可以根據自己情況進行修改。

三、使用IP池

有的網站會對用戶的IP進行檢測,如果在短時間內發現同一個IP對網站進行多次訪問,網站會對IP進行封禁。

和之前介紹的代理服務器一樣,我們可以將多個代理服務器的IP組成一個IP池,每次爬取網站時重IP池中隨機選擇IP進行爬取。

我們可以在Scrapy項目中建立下載中間件(用來設置IP選擇的規則),然後在settings.py 文件中進行配置。

1、通過http://yum.iqianyue.com/proxy 找到代理IP;

2、在settings.py中添加IP池:

#IP池
IPPOOL = [
    {"ipaddr":"171.39.28.184:8123"},
    {"ipaddr":"118.24.156.214:8118"},
    {"ipaddr":"222.85.22.111:8010"},
    {"ipaddr":"222.89.74.38:8010"},
    {"ipaddr":"115.46.79.163:8123"},
    {"ipaddr":"121.31.156.8:8123"},
    {"ipaddr":"122.246.49.20:8010"}
]

3、在Scrapy 中與代理服務器設置相關的下載中間件爲:HttpProxyMiddleware,對應的類爲:scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware

編輯middlewares.py:

添加一個IPPOOLS類:

class IPPOOLS(HttpProxyMiddleware):
    def __init__(self, ip=''):
        self.ip = ip

    def process_request(self, request, spider):
        #隨機選擇一個IP
        thisip = random.choice(IPPOOL)
        print("當前使用IP爲:"+thisip["ipaddr"])
        #將對應的ip實際添加爲具體的代理,用該ip進行爬取
        request.meta["proxy"]="http://"+thisip["ipaddr"]

在settings.py 文件中進行設置:

# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
   #'zhaopin.middlewares.ZhaopinDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
    'zhaopin.middlewares.IPPOOLS':125
}

註釋: 

'zhaopin.middlewares.IPPOOLS'代表:'下載中間件所在目錄.下載中間件文件名.下載中間件內部要使用的類'。四、使用用戶代理池

1、在settings.py 中添加:

UAPOOL=[
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5"
]

2、在middlewares.py 文件中添加Uamid類:

class Uamid(UserAgentMiddleware):
    def __init__(self, ua=""):
        self.ua = ua

    def process_request(self, request, spider):
        thisua = random.choice(UAPOOL)
        print("當前使用的user-agent是:" + thisua)
        request.headers.setdefault('User-Agent', thisua)

3、在settings.py 文件中進行設置:

DOWNLOADER_MIDDLEWARES = {
   # 'ScrapyTest.middlewares.ScrapytestDownloaderMiddleware': 543,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':2,
    'ScrapyTest.middlewares.Uamid':1
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章