scrapy如何降低反爬风险

scrapy如何降低反爬风险

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
经验分享 程序员 微信小程序 职场和发展