scrapy - Scrapy:将参数从 CrawlerProcess 传递给管道
问题描述
我有一个CrawlerProcess
启动我想要的蜘蛛,但我希望它也将参数传递freq
给管道。
process = CrawlerProcess(get_project_settings())
process.crawl(spider, freq=freq)
process.start()
我知道获取参数的方法应该是使用:
@classmethod
def from_crawler(cls, crawler):
但我不知道如何freq
从那里获取参数。任何的想法 ?
解决方案
我花了一些时间才弄明白,但实际上一切都在该方法的核心 API描述中。
该解决方案可能不是最佳解决方案,因为我从蜘蛛获得了频率参数,但如果有人有更好的解决方案,则可以直接从爬虫中获取它。
所以管道看起来像:
class Pipeline(object):
def __init__(self, freq):
self.freq = freq
@classmethod
def from_crawler(cls, crawler):
return cls(freq=crawler.spider.data_test)
def open_spider(self, spider):
return
def process_item(self, item, spider):
print("Freq:{}\n".format(self.freq))
def close_spider(self, spider):
return
您要做的就是将要传递给管道的变量封装在 中cls
,给它们命名,__init__
并将它们作为类属性存储。为了能够从蜘蛛中抓取它,我必须将它存储在蜘蛛中也有一个属性:
class TestSpider(scrapy.Spider):
name = "test"
def __init__(self, freq):
self.freq = freq
如果您对此解决方案有一些改进,请随时发表评论或提供更好的解决方案。我知道这不是最优的。
推荐阅读
- javascript - Vue JS 重新创建根组件
- ios - ReplayKit 在反复进入后台后停止缓冲
- php - 如何在shopware的订单页面上添加价格
- c++ - 运算符重载以显示用户定义的数据类型
- visual-studio - 通过 VS Test Explorer 运行但通过 Resharper 时单元测试失败
- python - Python 3.7.0 和 PyQt5.11.2:模块“PyQt5.uic”没有属性“loadUI”
- heroku - API 密钥不允许从 IP 访问(Heroku)
- rust - 用子切片引用覆盖切片引用时出错
- javascript - 如何在每个刻度上绘制网格线?
- android - 无法创建 ViewModel - my_package.App 无法转换为 android.arch.lifecycle.LifecycleOwner