我正在使用scrapy来废弃一个网站
我写了一个蜘蛛并从页面中获取所有项目并保存到一个csv文件,现在我想保存total execution time
scrapy运行蜘蛛文件,实际上是在蜘蛛执行完成之后,当我们在终端它将显示一些结果starttime, endtime
,等等......所以现在在我的程序中,我需要计算scrapy运行蜘蛛所花费的总时间并将总时间存储在某个地方......
谁能通过一个例子让我现在如何做到这一点......
提前致谢...........
这可能很有用:
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
from scrapy.stats import stats
from datetime import datetime
def handle_spider_closed(spider, reason):
print 'Spider closed:', spider.name, stats.get_stats(spider)
print 'Work time:', datetime.now() - stats.get_stats(spider)['start_time']
dispatcher.connect(handle_spider_closed, signals.spider_closed)
我是一个初学者,但我用一种更简单的方法完成了它,我希望它有意义。
import datetime
然后声明两个全局变量,即 self.starting_time和self.ending_time。
在蜘蛛类的构造函数中,将开始时间设置为
def __init__(self, name=None, **kwargs):
self.start_time = datetime.datetime.now()
之后,使用封闭的方法找到结束和开始之间的差异。IE
def closed(self, response):
self.ending_time = datetime.datetime.now()
duration = self.ending_time - self.starting_time
print(duration)
差不多就是这样。在蜘蛛结束进程后不久,将调用关闭的方法。请参阅此处的文档。
到目前为止我发现的最简单的方法:
import scrapy
class StackoverflowSpider(scrapy.Spider):
name = "stackoverflow"
start_urls = ['https://stackoverflow.com/questions/tagged/web-scraping']
def parse(self, response):
for title in response.css(".summary .question-hyperlink::text").getall():
yield {"Title":title}
def close(self, reason):
start_time = self.crawler.stats.get_value('start_time')
finish_time = self.crawler.stats.get_value('finish_time')
print("Total run time: ", finish_time-start_time)