2016-11-25 52 views

回答

0

您可以使用GNU timeout命令执行此操作。

例如,1小时后停止履带:

timeout 3600 scrapy crawl spider_name 
0

Scrapy提供CLOSESPIDER_TIMEOUT选项停止指定的时间段之后爬行。

虽然这不是一个硬性限制 - Scrapy仍然会处理它已经下载的所有请求,但它不会从调度程序中获取新的请求;换句话说,CLOSESPIDER_TIMEOUT模拟Ctrl-C,而不是Ctrl-C + Ctrl-C,并试图优雅地停止蜘蛛。这通常不是一个坏主意,因为杀蜘蛛可能会导出的数据文件被破坏。

spider活着多长时间取决于网站和重试&并发设置。默认的DOWNLOAD_TIMEOUT是180s;请求可以重试2次,这意味着每个请求可能需要大约10分钟才能在最差的情况下完成。 CONCURRENT_REQUESTS默认为16,因此下载器中最多有16个请求,但可能会根据您抓取的内容并行下载。 Autothrottle或CONCURRENT_REQUESTS_PER_DOMAIN选项可能会限制单个域并行执行的多个请求。

因此,在绝对最坏的情况下(顺序下载,所有请求都没有响应并重试2次),蜘蛛可能会使用默认设置挂起约3小时。但通常在实践中,这个时间要短得多,几分钟。因此,您可以将CLOSESPIDER_TIMEOUT设置为一个值,例如比你的X小时少20分钟,然后使用额外的管理员(比如@lufte建议的GNU超时)来实现硬超时,如果关机时间超长,就杀死一个蜘蛛。