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代理
- 打开 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 地址和端口,这就需要开发者事先准备好一系列代理服务器,该函数能随机从这些代理服务器中选择一个。
- 通过 settings.py 文件设置启用自定义的下载中间件。在 settings.py 文件中增加如下配置代码: #配置自定义的下载中间件 DOWNLOADER MIDDLEWARES = { demo.middlewares.RandomProxyMiddleware: 543, }
5、违反爬虫规则文件
ROBOTSTXT_OBEY = False
上一篇:
JS实现多线程数据分片下载
下一篇:
外包干了三年,废的一踏糊涂...