6

我正在使用scrapy来废弃一个网站

我写了一个蜘蛛并从页面中获取所有项目并保存到一个csv文件,现在我想保存total execution timescrapy运行蜘蛛文件,实际上是在蜘蛛执行完成之后,当我们在终端它将显示一些结果starttime, endtime,等等......所以现在在我的程序中,我需要计算scrapy运行蜘蛛所花费的总时间并将总时间存储在某个地方......

谁能通过一个例子让我现在如何做到这一点......

提前致谢...........

4

3 回答 3

6

这可能很有用:

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)
于 2012-06-28T13:43:00.773 回答
1

我是一个初学者,但我用一种更简单的方法完成了它,我希望它有意义。

import datetime

然后声明两个全局变量,即 self.starting_timeself.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)

差不多就是这样。在蜘蛛结束进程后不久,将调用关闭的方法。请参阅此处的文档

于 2019-06-01T17:53:05.013 回答
0

到目前为止我发现的最简单的方法:

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)
于 2020-12-25T20:04:56.487 回答