【发布时间】:2017-09-01 11:24:21
【问题描述】:
我怎样才能配置scrapy以不延迟地写入csv。
如果我运行scrapy crawl spider_1 并假设spider_1 预计有200 个项目,那么scrapy 将在csv 中写入,但分批写入。我不知道在哪里配置这个。
我试过了
CONCURRENT_REQUESTS = 1
CONCURRENT_ITEMS = 1
但它仍然以 15+ 批次写入 csv 文件。
这是我测试它的方式..
while sleep 2; do cat results/price.csv | wc -l; done;
结果是
0
35
35
35
35
52
52
52
52
70
70
请注意,它会写入第一个 32th 项目,然后是 20th,然后是 18th。
我想要的是在获取数据后立即写入项目。 我怎样才能做到这一点?
【问题讨论】:
-
scrapy 不发出同步请求。它发送大量请求并等待响应。因此你不会得到序列输出。
-
您可能想看看
CsvItemExporter是如何实现的,尤其是。.export_item(). -
我有类似的问题。我做了什么我将所有数据写入mongodb,然后从那里写入所有数据
-
@AnuragMisra 实际上你的建议是有道理的。我目前的实现是scrapy + django。我不想延迟的原因是我想以角度显示递增的数字(csv 行数)。因此,我可以创建一个指向 django 模型的 drf 端点。谢谢
-
@rojeeer,是的,我在管道中相应地实现了它。我用
CsvItemExporter。在 spider_open 中,我做spider_opened。在spider_closed我做self.exporter.finish_exporting()。在process_item我做self.exporter.export_item(item)并且我把它保存在django 数据库中。当我运行爬虫并签入 django 数据库时,它是同步的,与 csv 文件不同。