本节介绍Scrapy核心API,它适用于扩展和中间件的开发人员。 抓取工具 Scrapy API的主要入口点是Crawler 对象,通过from_crawler类方法传递给扩展。此对象提供对所有Scrapy核心组件的访问,这是扩展访问它们并将其功能挂钩到Scrapy的唯一方法。 Extension Manager负责加载和跟踪已安装的扩展,并通过EXTENSIONS设置配置它,其中包含所有可用扩展的字典及其顺序,类似于您配置下载中间件的方式。 classscrapy.crawler.Crawler(spidercls,settings ) 必须使用scrapy.spiders.Spider子类

本节介绍使用Scrapy时的常见做法。这些内容涉及许多主题,并且通常不属于任何其他特定部分。   从脚本运行Scrapy 您可以使用API从脚本运行Scrapy,而不是运行Scrapy的典型方法。scrapy crawl 请记住,Scrapy是建立在Twisted异步网络库之上的,因此您需要在Twisted reactor中运行它。 您可以用来运行蜘蛛的第一个实用程序是 scrapy.crawler.CrawlerProcess。该类将为您启动Twisted reactor,配置日志记录并设置关闭处理程序。此类是所有Scrapy命令使用的类。 这是一个示例,展示如何使用它运行单个蜘蛛

您可以使用scrapy项目内部的工具来控制和管理它们。 例如,要创建一个新蜘蛛: scrapy genspider mydomain mydomain.com   某些Scrapy命令(如crawl)必须从Scrapy项目内部运行。有关必须从项目内部运行哪些命令以及哪些命令不能运行,请参阅下面的命令参考。 还要记住,某些命令在从项目内部运行时可能会略有不同的行为。例如,user_agent如果获取的url与某个特定的spider相关联,则fetch命令将使用spider-overridden行为(例如覆盖用户代理的属性)。这是故意的,因为该fetch命令旨在用于检查蜘蛛如何下载页面。

您可以从没有参数的Scrapy工具开始,它将打印一些使用帮助和可用命令: Scrapy X.Y – no active project Usage: scrapy <command> [options] [args] Available commands: crawl Run a spider fetch Fetch a URL using the Scrapy downloader […] 如果您在Scrapy项目中,第一行将打印当前活动的项目。在这个例子中,它是从项目外部运行的。如果从项目内部运行,它将打印出如下内容: Scrapy X.Y – project: mypro

您可以-a 在运行蜘蛛时使用该选项为您的蜘蛛提供命令行参数: scrapy crawl quotes -o quotes-humor.json -a tag=humor   这些参数传递给Spider的__init__方法,默​​认情况下变为spider属性。 在此示例中,为参数提供的值tag将通过self.tag。您可以使用此选项使您的蜘蛛只获取具有特定标记的引号,并根据参数构建URL: import scrapy class QuotesSpider(scrapy.Spider): name = “quotes” def start_requests(self): url = ‘