当我抓取网站时,我产生的项目会去哪里?

Where do my yielded items go when I'm scraping a website?

我正在使用 scrapy 来抓取网站。我有这段代码可以擦除我的 data.json 文件中的现有数据:

with open('data.json', 'r+') as f:
   if f:
      f.truncate(0)

然后,我将数据生成到物品容器中:

items['price'] = price
items['name'] = name
yield items

在函数结束时,我向列表中的下一个 url 发出请求:

yield scrapy.Request(next_url, callback=self.parse)

我注意到一旦爬虫停止,所有数据都会写入文件。我想知道我抓取的数据是如何存储的。它会作为生成器存储,然后在所有递归完成后最后访问吗?还是我连续做两次事情?也就是说,产生我的数据然后再次通过代码产生请求?我认为这更多是对生成器缺乏了解,因此非常感谢任何见解。

没有看到你的代码,我只能假设你的数据只存储在内存中。如果您只生成项目而没有管道来处理它们,那么存储这些项目的最简单方法是使用提要导出。你可以像这样执行你的蜘蛛来做到这一点:

scrapy crawl my_spider -o my_data.csv

它支持其他扩展(json、xml、...),您可以阅读有关提要导出的更多信息here

另一种方法是编写一个 pipelines 来处理您的项目并将它们存储在您想要的 files/database/anywhere 中。