一、禁止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
}