本文已参与「新人创作礼」活动,一起开启掘金创作之路。 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