【发布时间】:2017-12-25 23:24:04
【问题描述】:
我正在使用scrapy。我有一个以以下开头的管道:
class DynamicSQLlitePipeline(object):
@classmethod
def from_crawler(cls, crawler):
# Here, you get whatever value was passed through the "table" parameter
table = getattr(crawler.spider, "table")
return cls(table)
def __init__(self,table):
try:
db_path = "sqlite:///"+settings.SETTINGS_PATH+"\\data.db"
db = dataset.connect(db_path)
table_name = table[0:3] # FIRST 3 LETTERS
self.my_table = db[table_name]
我一直在阅读 https://doc.scrapy.org/en/latest/topics/api.html#crawler-api ,其中包含:
Scrapy API 的主要入口点是 Crawler 对象,通过 from_crawler 类方法传递给扩展。该对象提供对所有 Scrapy 核心组件的访问,它是扩展访问它们并将其功能挂钩到 Scrapy 的唯一方法。
但是还是不明白from_crawler方法,以及爬虫对象。爬虫对象与蜘蛛和管道对象之间有什么关系?爬虫如何以及何时实例化?蜘蛛是爬虫的子类吗?我问过Passing scrapy instance (not class) attribute to pipeline,但我不明白这些部分是如何组合在一起的。
【问题讨论】:
-
谢谢,但是爬虫不在那个图表上。
-
如果我理解正确,
crawler是运行引擎以在图像上执行所有这些操作的对象 - 获取 url,从服务器读取数据,仅使用spider解析数据,使用管道和中间件更改数据并进行其他操作,例如写入文件。