【问题标题】:What is the relationship between the crawler object with spider and pipeline objects?爬虫对象与蜘蛛和管道对象之间有什么关系?
【发布时间】: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 解析数据,使用管道和中间件更改数据并进行其他操作,例如写入文件。

标签: python scrapy


【解决方案1】:

Crawler 实际上是 Scrapy 架构中最重要的对象之一。它是爬行执行逻辑的核心部分,将许多其他部分“粘合”在一起

Scrapy API 的主要入口点是 Crawler 对象,传递给 通过 from_crawler 类方法进行扩展。该对象提供 访问所有 Scrapy 核心组件,这是唯一的途径 扩展来访问它们并将它们的功能挂钩到 Scrapy。

一个或多个爬虫由CrawlerRunnerCrawlerProcess 实例控制。

现在,在许多 Scrapy 组件上可用的 from_crawler 方法只是这些组件访问运行此特定组件的 crawler 实例的一种方式。

另外,请查看Crawler, CrawlerRunner and CrawlerProcess actual implementations

而且,为了更好地理解 Scrapy 在内部的工作原理,我个人认为从脚本运行爬虫(check out these detailed step-by-step instructions)很有帮助。

【讨论】:

  • 爬虫和管道是否包含在“scrapy components”中?
  • @user61629 是的,我已经将它们松散地包含在“组件”术语下。
  • 谢谢,你介意看看我在stackoverflow.com/questions/47981620/…的跟进
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2013-11-30
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多