我正在尝试收集一些关于一堆不同网站的信息.我希望Item每个站点生成一个,总结我在该站点上找到的信息,无论我在哪个页面上找到它.
我觉得这应该是一个项目管道,比如重复过滤器示例,除了我需要最终内容,而Item不是爬虫检查的第一页的结果.
所以我尝试使用request.meta一个部分填充Item通过各个Requests为给定的网站.为了完成这项工作,我必须让我的解析回调Request每次调用返回一个新的,直到它没有更多的页面可访问,然后最终返回完成Item.如果我找到了我想要遵循的多个链接,那将是一种痛苦,如果调度程序因链接周期而丢弃其中一个请求,则会完全中断.
我能看到的另一种方法是将蜘蛛输出转储到json-lines并使用外部工具对其进行后处理.但我宁愿把它折叠成蜘蛛,最好是在中间件或物品管道中.我怎样才能做到这一点?
这个丑陋的解决方案怎么样?
在管道上定义一个字典 (defaultdict(list)),用于存储每个站点的数据。在 process_item 中,您只需将 dict(item) 附加到每个站点项目的列表中并引发 DropItem 异常。然后,在 close_spider 方法中,您可以将数据转储到您想要的任何位置。
理论上应该可行,但我不确定这个解决方案是最好的解决方案。
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |