我有一个开始2000网址的列表,并且正在使用:
DOWNLOAD_DELAY = 0.25
为了控制请求的速度,但是我还想在n个请求之后添加更大的延迟。例如,我希望每个请求延迟0.25秒,每500个请求延迟100秒。
编辑:
样例代码:
import os
from os.path import join
import scrapy
import time
date = time.strftime("%d/%m/%Y").replace('/','_')
list_of_pages = {'http://www.lapatilla.com/site/':'la_patilla',
'http://runrun.es/':'runrunes',
'http://www.noticierodigital.com/':'noticiero_digital',
'http://www.eluniversal.com/':'el_universal',
'http://www.el-nacional.com/':'el_nacional',
'http://globovision.com/':'globovision',
'http://www.talcualdigital.com/':'talcualdigital',
'http://www.maduradas.com/':'maduradas',
'http://laiguana.tv/':'laiguana',
'http://www.aporrea.org/':'aporrea'}
root_dir = os.getcwd()
output_dir = join(root_dir,'data/',date)
class TestSpider(scrapy.Spider):
name = "news_spider"
download_delay = 1
start_urls = list_of_pages.keys()
def parse(self, response):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
filename = list_of_pages[response.url]
print time.time()
with open(join(output_dir,filename), 'wb') as f:
f.write(response.body)
在这种情况下,列表较短,但想法是相同的。我想将延迟级别设置为每个请求一个,每个“ N”个请求一个。我不抓取链接,只是保存主页。
您可以考虑使用AutoThrottle扩展,该扩展没有严格控制延迟,而是拥有自己的算法,可以根据响应时间和并发请求数即时调整它,从而降低Spider的速度。
如果您需要对抓取过程中某些阶段的延迟进行更多控制,则可能需要
自定义中间件
或自定义扩展(类似于AutoThrottle-
source)。
您还可以即时更改.download_delay
蜘蛛的属性。顺便说一句,这正是AutoThrottle扩展在后台进行的工作-
它可以动态更新.download_delay
值。
一些相关主题:
我正在使用谷歌地图api获取城市之间的距离,获取这些距离后,我想将它们存储在数组中。但是谷歌api不允许无延迟请求。我如何添加延迟。或者有没有其他方法可以获得驾驶距离。这是代码 以上代码在没有循环的情况下运行良好。
问题内容: 我取这个页面与该请求库中的Node.js,并使用解析身体cheerio。 调用已解析的响应正文,发现该页面的title属性为: …什么时候应该: 我尝试将请求库的选项设置为include ,但这似乎并没有改变任何东西。 如何保留这些字符? 问题答案: 该页面似乎是用iso-8859-1编码的。您需要通过传递并使用诸如node- iconv之 类的东西来告诉您退回未编码的缓冲区。 如果要
问题内容: 按计划运行Scrapy使我绕过Twist(ed)。 我以为下面的测试代码可以工作,但是第二次触发蜘蛛时出现错误: 我猜想,作为CrawlerProcess的一部分,Twisted Reactor会在不需要时再次启动,从而导致程序崩溃。有什么办法可以控制吗? 同样在这个阶段,如果有一种自动执行Scrapy Spider的替代方法可以按计划运行,我也很高兴。我试过了,但还是不能让它循环:
问题内容: 到目前为止,我一直只使用scrapy并编写自定义类来使用ajax处理网站。 但是,如果我要使用scrapy-splash,据我所知,它会在javascript之后刮擦呈现的html,那么对我的抓取工具的速度会产生重大影响吗? 用scrapy刮擦香草html页面与使用scrapy-splash渲染javascript html所花费的时间之间的比较是什么? 最后,scrapy-splas
问题内容: 我正在尝试实现一个重试由于临时原因而失败的ajax请求的系统。在我的情况下,这是关于重试失败的请求,该请求带有401状态代码,因为会话已过期,然后调用了刷新会话的刷新Web服务。 问题在于成功完成重试后不会调用“完成”回调,这与调用“成功” ajax选项回调不同。我在下面做了一个简单的例子: 有没有一种方法可以在成功重试后调用完成样式的回调?我知道延期后“拒绝”后就无法“解决”,是否可
我正在尝试调用post请求将文件上载到Archer。请在下面找到我的代码: 我收到以下错误:b'{“消息”:“请求包含实体正文,但没有内容类型标头。此资源不支持推断的媒体类型“应用程序/八位字节流”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“application/octet stream\”的内容中读取类型为“AttachmentWrap
我尽力描述我的处境。我的wicket站点包含list wicket组件,其中每个列表元素都有另一个列表。最低级别列表中的每个元素都有下载某个文件的ajax wicket链接。这一切都很好。我习惯了这种懒散的行为。此行为的方法startDownload在link onClick方法中调用。
Flask 的设计原则中有一条是响应对象被创建并在一条可能的回调链中传递,而在 这条回调链但中的任意一个回调,您都可以修改或者替换掉他们。当请求开始被 处理时,还没有响应对象,响应对象将在这一过程中,被某个视图函数或者系统 的其他组件按照实际需要来闯将。 但是,如果您想在响应过程的结尾修改响应对象,但是这是对象还不存在,那么会发生 什么呢?一个常见的例子是您可能需要在 before-request