python - 有什么方法可以为每个蜘蛛使用单独的 scrapy 管道吗?

标签 python web-scraping scrapy scrapy-spider

我想获取不同域下的网页,这意味着我必须在“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 设置。

另见:

希望对您有所帮助。

关于python - 有什么方法可以为每个蜘蛛使用单独的 scrapy 管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381237/

相关文章:

python - 使用Python自动化使用在线文件转换器

python - Django、Django Dynamic Sc​​raper、Djcelery 和 Scrapyd - 不在生产中发送任务

python - 使用屏幕缓冲区创建一个程序到 'edit' 控制台中显示的文本

python - Scrapy:规则SgmlLinkExtractor概念

javascript - 为什么在 CasperJS 中 POST 请求响应数据为空,即使相同的请求在 Postman 中显示数据

python - scrapy.Request 不回调我的函数

python - Scrapy 如何使用 Loader 忽略带有空白字段的项目

python - 将字符串转换为numpy.ndarray python

Python3 beautifulsoup模块 'NoneType'错误

python - Flask 中的嵌套蓝图?