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
,并返回/修改项目。我已经更新了示例来说明这一点。