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