在脚本中运行X小时的零工

  • 本文关键字:小时 脚本 运行 scrapy
  • 更新时间 :
  • 英文 :


是否有任何方法可以作为bash脚本的一部分运行scrapy,而仅在一定时间内运行它?也许在X小时后模拟Ctrl-C Ctrl-C?

您可以使用GNU超时命令进行此操作。

例如,在1小时后停止爬网:

timeout 3600 scrapy crawl spider_name

scrapy提供了clessespider_timeout选项,以在指定的时间段后停止爬行。

这并不是一个硬限制 - 废纸仍将处理它已经下载的所有请求,但是它不会从调度程序中获取新的请求;换句话说,Closespider_timeout模拟Ctrl-C,而不是Ctrl-C Ctrl-C,并试图阻止Spider Gracefuly。通常这不是一个坏主意,因为杀死蜘蛛可能会例如留下导出的数据文件。

蜘蛛还活着多少,取决于网站和重试&并发设置。Default Download_timeout是180年代;请求最多可以重述2次,这意味着在最坏情况下,每个请求可能需要约10分钟才能完成。默认情况下,concurrent_requests为16个,因此下载器中最多有16个请求,但是根据您的爬网,可以并行下载它们。Autothrottle或Concurrent_requests_per_domain选项可能会限制单个域并行执行的许多请求。

因此,在绝对最糟糕的情况下(顺序下载,所有请求都没有反应并重述2次)蜘蛛可能会在默认设置中悬挂约3个小时。但是通常在实践中,这段时间短得多,几分钟。因此,您可以将Closespider_timeout设置为一个值,例如比您的X小时少20分钟,然后使用其他主管(例如@lufte建议的GNU超时)来实现较难的超时并杀死蜘蛛,如果其关闭时间是超长的。

最新更新