爬虫如何避免被禁止

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

猜你喜欢

转载自blog.csdn.net/SteveForever/article/details/81809561