我想获取不同域下的网页,这意味着我必须在“scrapy crawl myspider”命令下使用不同的蜘蛛。但是,由于网页内容不同,我必须使用不同的管道逻辑将数据放入数据库。但是对于每个蜘蛛来说,它们都必须经过 settings.py 中定义的所有管道。是否有其他优雅的方法为每个蜘蛛使用单独的管道?
最佳答案
ITEM_PIPELINES
设置在引擎启动期间为项目中的所有蜘蛛全局定义。它不能在每个 spider 中即时更改。
这里有一些可供考虑的选项:
更改管道代码。在管道的
process_item
方法中跳过/继续处理蜘蛛返回的项目,例如:def process_item(self, item, spider): if spider.name not in ['spider1', 'spider2']: return item # process item
改变开始爬行的方式。去做 from a script ,基于作为参数传递的蜘蛛名称,在调用
crawler.configure()
之前覆盖您的ITEM_PIPELINES
设置。
另见:
- Scrapy. How to change spider settings after start crawling?
- Can I use spider-specific settings?
- Using one Scrapy spider for several websites
- related answer
希望对您有所帮助。
关于python - 有什么方法可以为每个蜘蛛使用单独的 scrapy 管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381237/