gpt4 book ai didi

python - Scrapy:如何获取文件下载状态

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:37 24 4
gpt4 key购买 nike

我是 Scrapy 的新手,请多多包涵。

我有一个访问页面并下载文件的蜘蛛。最后,我想将文件名以及其他有用信息写入数据库表。

我只想在实际下载文件(而不是“更新”)时将信息写入数据库表

--> 现在,我正在努力查明文件是否已下载或是否为“最新”。

如果文件已下载,我会从日志中看到:

2017-08-22 17:25:16 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
....,
'downloader/response_count': 5,
'downloader/response_status_count/200': 5,
'file_count': 1,
-->'file_status_count/downloaded': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 8, 22, 16, 25, 16, 789000),
'item_scraped_count': 1,
'log_count/DEBUG': 8,
'log_count/INFO': 7,
'request_depth_max': 1,
....
2017-08-22 17:25:16 [scrapy.core.engine] INFO: Spider closed (finished)

如果一个文件已经被下载过,Scrapy 将不会再次下载该文件,并且它有一个如下所示的日志:

2017-08-22 17:32:49 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
...,
'downloader/response_status_count/200': 4,
'file_count': 1,
-->'file_status_count/uptodate': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 8, 22, 16, 32, 49, 787000),
'item_scraped_count': 1,
'log_count/DEBUG': 7,
'log_count/INFO': 7,
...
2017-08-22 17:32:49 [scrapy.core.engine] INFO: Spider closed (finished)

一些我想获取下载状态的方法。

我查看了 scrapy 代码,我认为我要查找的函数是 pipelines 文件夹中 files.py 中的“inc_stats”:

def inc_stats(self, spider, status):
spider.crawler.stats.inc_value('file_count', spider=spider)
spider.crawler.stats.inc_value('file_status_count/%s' % status, spider=spider)

我如何从实际的 Scrapy 代码中提取我想要的信息(“下载”或“更新”)到我的蜘蛛?

非常感谢您的帮助

最佳答案

您必须覆盖 FilesPipeline,并自行创建一个来覆盖 inc_stats 方法。

你的 settings.py 中应该有这样的东西:

ITEM_PIPELINES = {
...
'scrapy.pipelines.files.FilesPipeline': 1
...
}

启用scrapy自带的默认FilesPipeline,你可以创建自己的管道。在 pipelines.py 中(或任何你想要的地方)创建一个这样的类:

from scrapy.pipelines.files import FilesPipeline

class CustomFilesPipeline(FilesPipeline):
def inc_stats(self, spider, status):
super(CustomFilesPipeline, self).inc_stats(spider=spider, status=status)
if status == 'downloaded':
# do whatever you want

要启用该管道而不是来自 scrapy 的管道,请将 settings.py 更改为:

ITEM_PIPELINES = {
...
'myproject.pipelines.CustomFilesPipeline': 1
...
}

检查 myproject.pipelines.CustomFilesPipeline 是否是项目中管道类的路径。

关于python - Scrapy:如何获取文件下载状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45823196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com