Scrapy如何降低反爬风险

239 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 1、设置时间间隔,降低爬取速度

打开setting.py设置

#减少请求并发数量
CONCURRENT_REQUESTS = 4
CONCURRENT_REQUESTS_PER_DOMAIN = 4
CONCURRENT_REQUESTS_PER_IP = 4
#设置请求间隔
DOWNLOAD_DELAY = 1

2.设置随机请求头部

middlewares.py

import random


class UserAgentDownloadMiddleWare(object):
    USER_AGENTS = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 '
        'Safari/537.36', 
        'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36',
        'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; pl-PL; rv:1.0.1) Gecko/20021111 Chimera/0.6',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 '
        'Safari/537.36', 
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
        'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko, '
        'Safari) Cheshire/1.0.UNOFFICIAL', 
        'Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.8.1b2) Gecko/20060821 BonEcho/2.0b2 (Debian-1.99+2.0b2+dfsg-1)'
    ]

    def process_request(self, request, spider):
        user_agent = random.choice(self.USER_AGENTS)
        request.headers['User-Agent'] = user_agent

setting.py

DOWNLOADER_MIDDLEWARES = {
    'douban.middlewares.UserAgentDownloadMiddleWare': 543,
}

3、禁用cookie

COOKIES_ENABLED = False

4、使用动态IP代理

  1. 打开 Scrapy 项目下的 middlewares.py 文件,在该文件中增加定义如下类:

    class RandomProxyMiddleware (object) :#动态设置代理服务器的IP 地址    
    	def process request (self, request, spider):        # 	      
        	get_random_proxy() 函数随机返回代理服务器的IP 地址和端口        			     				request.meta["proxy"] = get_random_proxy()
    

    上面程序通过自定义的下载中间件为 Scrapy 设置了代理服务器。程序中的 get_random_proxy() 函数需要能随机返回代理服务器的 IP 地址和端口,这就需要开发者事先准备好一系列代理服务器,该函数能随机从这些代理服务器中选择一个。

  2. 通过 settings.py 文件设置启用自定义的下载中间件。在 settings.py 文件中增加如下配置代码:

    #配置自定义的下载中间件
    DOWNLOADER MIDDLEWARES = {
      'demo.middlewares.RandomProxyMiddleware': 543,
    }
    

5、违反爬虫规则文件

ROBOTSTXT_OBEY =  False