Web scraping 动态调整刮痧中的胡椒碱存在

Web scraping 动态调整刮痧中的胡椒碱存在,web-scraping,scrapy,Web Scraping,Scrapy,我目前使用 custom_settings = { "ITEM_PIPELINES" : { ... } } 设置每个十字轴的管道。接下来,对于某些起始URL,我需要排除一些管道。我在\uuuu init\uuuu中检测到这一点。尝试重新分配自定义\u设置,但无效。是否可以动态更改管道列表?否,请确保在spider运行期间无法更改自定义设置 然而,您在这里看到的解决方案是将检测逻辑添加到管道本身。例如,向名为\u的项目添加额外字段到\u pipeline2,如果管道不存在,则中断管道。 例如:

我目前使用

custom_settings = { "ITEM_PIPELINES" : { ... } }

设置每个十字轴的管道。接下来,对于某些起始URL,我需要排除一些管道。我在
\uuuu init\uuuu
中检测到这一点。尝试重新分配自定义\u设置,但无效。是否可以动态更改管道列表?

否,请确保在spider运行期间无法更改自定义设置

然而,您在这里看到的解决方案是将检测逻辑添加到管道本身。例如,向名为
\u的项目添加额外字段到\u pipeline2
,如果管道不存在,则中断管道。
例如:

def parse(self, response):
    item = MyItem()
    #....
    if item_should_be_pipelined:
        item['_to_pipeline2'] = True
    return item
在你的管道中:

def process_item(self, item, spider):
    if not item.get("_to_pipeline2", False):
        return item # do not use this pipeline
    # normal pipeline continues otherwise
    del item['_to_pipeline2']
或者对于您的情况:

def process_item(self, item, spider):
    if 'http://stackoverflow.com' in spider.start_urls:
        return item  # do not use pipeline 
    # otherwise execute pipeline code here

否,请注意,在爬行器运行期间无法更改自定义设置

然而,您在这里看到的解决方案是将检测逻辑添加到管道本身。例如,向名为
\u的项目添加额外字段到\u pipeline2
,如果管道不存在,则中断管道。
例如:

def parse(self, response):
    item = MyItem()
    #....
    if item_should_be_pipelined:
        item['_to_pipeline2'] = True
    return item
在你的管道中:

def process_item(self, item, spider):
    if not item.get("_to_pipeline2", False):
        return item # do not use this pipeline
    # normal pipeline continues otherwise
    del item['_to_pipeline2']
或者对于您的情况:

def process_item(self, item, spider):
    if 'http://stackoverflow.com' in spider.start_urls:
        return item  # do not use pipeline 
    # otherwise execute pipeline code here

在运行spider scrapy之前,它会收集settings.py的设置。从命令行调用动态管道或管道传递参数:

搔痒爬行你的蜘蛛-管道=“Mongo”
或
刮痧爬行你的蜘蛛-a=“Mongo,Elastic,Redis”
然后使用sys在settings.py中收集这些数据。

导入系统
数据存储=无
对于sys.argv中的arg:
如果参数中的“=”:
拆分=参数拆分(“”)
如果拆分[0]=“管道”:
数据存储=已拆分[1]

项目_管道={
'project.pipelines.{}'。格式(数据存储):10
}

这样用户就可以从命令行加载所需的管道。

在运行spider scrapy之前,它会收集settings.py的设置。从命令行调用动态管道或管道传递参数:

搔痒爬行你的蜘蛛-管道=“Mongo”
或
刮痧爬行你的蜘蛛-a=“Mongo,Elastic,Redis”
然后使用sys在settings.py中收集这些数据。

导入系统
数据存储=无
对于sys.argv中的arg:
如果参数中的“=”:
拆分=参数拆分(“”)
如果拆分[0]=“管道”:
数据存储=已拆分[1]

项目_管道={
'project.pipelines.{}'。格式(数据存储):10
}

用户可以通过这种方式从命令行加载所需的管道。

问题是,即使我在
\uuuuu init\uuuuu
中更改自定义设置,它也无法工作。是的,可能是当爬虫在爬网初始化时拉动爬行器时加载了该设置,因此之后确实无法修改管道队列,而且很可能是一个错误真是个坏主意。将此类逻辑放入管道本身通常是首选方法,即使
process\u item
也会接收spider作为参数,以便您可以检查其中的
spider.start\u url
,并返回/修改项目。我已经更新了这个例子来说明这一点。问题是,即使我在
\uuuuu init\uuuu
中更改自定义的设置,它也不起作用。是的,可能是爬虫程序在爬网初始化时拉动爬虫时加载了该设置,所以在那之后真的没有办法修改管道队列,而且很可能是一个非常糟糕的主意。将此类逻辑放入管道本身通常是首选方法,即使
process\u item
也会接收spider作为参数,以便您可以检查其中的
spider.start\u url
,并返回/修改项目。我已经更新了示例来说明这一点。