(原谅这个名词) 2:测试 其中CONCURRENT_REQUESTS是进程数CONCURRENT_REQUESTS_PER_DOMAIN 单该站点同时多少进程可以爬 DOWNLOAD_DELAY 则是下载时延 测试一: scrapy配置如下: 进程数4,时延0.1 CONCURRENT_REQUESTS = 8 DOWNLOAD_DELAY = 0.1 CONCURRENT_REQUESTS_PER_DOMAIN cpu 35% 内存 60~~100.网速 12 kb下载 测试二: scrapy配置如下 :进程数64,时延0.1 CONCURRENT_REQUESTS = 128 DOWNLOAD_DELAY cpu 35% 内存 80.网速 12 kb下载 测试三: scrapy配置如下 :进程数64,时延0.1 CONCURRENT_REQUESTS = 128 DOWNLOAD_DELAY = 0.1 cpu 35% 内存 80.网速 12 kb下载 测试四: scrapy配置如下 :进程数64,时延0.5 CONCURRENT_REQUESTS = 128 DOWNLOAD_DELAY = 0.5
,默认8 CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 默认0,对网站每个IP的最大并发请求,会覆盖上面PER_DOMAIN配置, # 同时DOWNLOAD_DELAY也成了相同 custom_settings = { 'DOWNLOAD_DELAY': 10 } 这样DOWNLOAD_DELAY为10这个配置,只在当前程序中生效。 scrapy crawl [spiderName] -s DOWNLOAD_DELAY=10 程序中获取配置 我们通常也将数据库的用户、密码、ip等信息配置在settings中,然后通过crawler ') print(delay) DOWNLOAD_DELAY在全局配置中我修改为3,如果没有在程序中定义custom_settings,则输出为3。 scrapy crawl DouLuoDaLu -s DOWNLOAD_DELAY=11 则输出为11,覆盖了程序内变量。
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
处理的并发请求数 默认值0,代表无限制,需要注意两点 如果不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每个IP来计算,而不是每个域名 该设置也影响DOWNLOAD_DELAY ,如果该值不为零,那么DOWNLOAD_DELAY下载延迟是限制每个IP而不是每个域 CONCURRENT_REQUESTS_PER_IP = 16 4.如果没有开启智能限速 这个值就代表一个规定死的值 ,代表对同一网址延迟请求的秒数 DOWNLOAD_DELAY = 3 5.延迟 开启True,默认False AUTOTHROTTLE_ENABLED = True 起始的延迟 AUTOTHROTTLE_START_DELAY = 5 最小延迟 DOWNLOAD_DELAY = 3 最大延迟 AUTOTHROTTLE_MAX_DELAY = 10 每秒并发请求数的平均值 AUTOTHROTTLE_TARGET_CONCURRENCY
COOKIES_ENABLED = False 设置下载延迟 DOWNLOAD_DELAY = 3 最后添加自己写的下载中间件类 DOWNLOADER_MIDDLEWARES = { 'mySpider.middlewares.MyDownloaderMiddleware DOWNLOAD_DELAY 默认: 0 下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。 同时也支持小数: DOWNLOAD_DELAY = 0.25 # 250 ms of delay 默认情况下,Scrapy在两个请求间不等待一个固定的值, 而是使用0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY 的结果作为等待间隔。
60/2 * 2 * 60 * 24 =86400条数据: # 当并发数和下载延迟均设置为2时,没有出现反爬限制(可多次尝试) CONCURRENT_REQUESTS = 2 DOWNLOAD_DELAY CONCURRENT_REQUESTS = 1 DOWNLOAD_DELAY = 5 加入验证码识别 事实上,这种情况下限制后是被重定向到一个验证码页面。
以下蜘蛛符合此要求,进行初始请求,然后因download_delay设置而空转 telnet_test.pyimport scrapyfrom scrapy.http import Requestclass "telnet_waiting" allowed_domains = ["example.org"] start_urls = ["http://www.example.org"] download_delay
def _do_download(version, download_base, to_dir, download_delay): egg = os.path.join(to_dir, 'distribute tarball = download_setuptools(version, download_base, to_dir, download_delay use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, download_delay ImportError except ImportError: return _do_download(version, download_base, to_dir, download_delay return _do_download(version, download_base, to_dir, download_delay
self.db.close() (7)修改配置文件 - 打开配置文件:settings.py 开启并配置ITEM_PIPELINES信息,配置数据库连接信息 - 当有CONCURRENT_REQUESTS,没有DOWNLOAD_DELAY 时,服务器会在同一时间收到大量的请求 - 当有CONCURRENT_REQUESTS,有DOWNLOAD_DELAY 时,服务器不会在同一时间收到大量的请求 # 忽略爬虫协议 ROBOTSTXT_OBEY = False # 并发量 CONCURRENT_REQUESTS = 1 #下载延迟 DOWNLOAD_DELAY = 0 ITEM_PIPELINES = { #'educsdn.pipelines.EducsdnPipeline
DOWNLOAD_DELAY 默认: 0 下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。 同时也支持小数: DOWNLOAD_DELAY = 0.25 # 250 ms of delay 默认情况下,Scrapy在两个请求间不等待一个固定的值, 而是使用0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY
'DOWNLOAD_DELAY': 3, ## 下载延时 更新:经过测试,每次请求切换请求头,切换匿名代理(隧道转发)。可以解决这个问题。
2.6 爬取多个页面的实现 前提准备:放开DOWNLOAD_DELAY的限制并修改为1 # See also autothrottle settings and docs DOWNLOAD_DELAY docs.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs DOWNLOAD_DELAY
Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5' DOWNLOAD_DELAY
demo文件,使用cmd命令: asyncpy genspider demo 全局settings settings配置 简介 CONCURRENT_REQUESTS 并发数量 RETRIES 重试次数 DOWNLOAD_DELAY 并发数量 custom_settings = { "RETRIES": 1, # 重试次数 "DOWNLOAD_DELAY
降速: 将其中的访问速度与下载速度调整一下,具体设置: #并发请求个数(越小越慢) 默认是16个 CONCURRENT_REQUESTS = 5 #下载延迟时间(越大请求越慢) DOWNLOAD_DELAY
该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。 scrapy.core.downloader.Downloader' 用于crawl的downloader. - DOWNLOADER_MIDDLEWARES 默认:: {} 保存项目中启用的下载中间件及其顺序的字典 - DOWNLOAD_DELAY 将会被重定向到log中 - RANDOMIZE_DOWNLOAD_DELAY 默认: True 如果启用,当从相同的网站获取数据时,Scrapy将会等待一个随机的值 (0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY
doc.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs DOWNLOAD_DELAY CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default) COOKIES_ENABLED = False 解释说明 一、降低下载延迟 DOWNLOAD_DELAY
,默认值0,代表无限制,需要注意两点 #I、如果不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每个IP来计算,而不是每个域名 #II、该设置也影响DOWNLOAD_DELAY ,如果该值不为零,那么DOWNLOAD_DELAY下载延迟是限制每个IP而不是每个域 #CONCURRENT_REQUESTS_PER_IP = 16 #4、如果没有开启智能限速,这个值就代表一个规定死的值 ,代表对同一网址延迟请求的秒数 #DOWNLOAD_DELAY = 3 #===>第三部分:智能限速/自动节流:AutoThrottle extension<=== #一:介绍 from scrapy.contrib.throttle AUTOTHROTTLE_TARGET_CONCURRENCY #3、下一次请求的下载延迟就被设置成:对目标站点下载延迟时间和过去的下载延迟时间的平均值 #4、没有达到200个response则不允许降低延迟 #5、下载延迟不能变的比DOWNLOAD_DELAY AUTOTHROTTLE_MAX_DELAY更高 #四:配置使用 #开启True,默认False AUTOTHROTTLE_ENABLED = True #起始的延迟 AUTOTHROTTLE_START_DELAY = 5 #最小延迟 DOWNLOAD_DELAY
第二个是下载间隙,由于下面的程序要下载多个页面,所以需要给一个间隙(不给也可以,只是很容易被侦测到),第三个是请求头,添加一个User-Agent,第四个是打开一个管道 ROBOTSTXT_OBEY=False DOWNLOAD_DELAY
参考 DOWNLOAD_DELAY 设置。 如果可行,使用 Google cache 来爬取数据,而不是直接访问站点。 使用IP池。例如免费的 Tor项目 或付费服务(ProxyMesh)。 AUTOTHROTTLE_MAX_DELAY 默认60 AUTOTHROTTLE_DEBUG 默认False CONCURRENT_REQUESTS_PER_DOMAIN CONCURRENT_REQUESTS_PER_IP DOWNLOAD_DELAY
item def close_spider(self, spider): self.fp.close() settings.py ROBOTSTXT_OBEY = False DOWNLOAD_DELAY
扫码关注腾讯云开发者
领取腾讯云代金券