Scrapy广泛使用信号来通知特定事件发生的时间。您可以在Scrapy项目中捕获一些这些信号(例如使用扩展名)来执行其他任务或扩展Scrapy以添加未提供的开箱即用的功能。 即使信号提供了几个参数,捕获它们的处理程序也不需要接受所有这些参数 – 信号调度机制只会传递处理程序接收的参数。 您可以通过Signals API连接信号(或发送您自己的 信号)。 这是一个简单的示例,展示了如何捕获信号并执行某些操作: from scrapy import signals from scrapy import Spider class DmozSpider(Spider): name = “d

每个中间件组件都是一个Python类,它定义了以下一个或多个方法: 类scrapy.spidermiddlewares.SpiderMiddleware process_spider_input(响应,蜘蛛) 对于通过蜘蛛中间件并进入蜘蛛的每个响应,都会调用此方法进行处理。 process_spider_input()应该返回None或提出异常。 如果它返回None,Scrapy将继续处理此响应,执行所有其他中间件,直到最后,响应被传递给蜘蛛进行处理。 如果它引发异常,Scrapy将不会打扰任何其他蜘蛛中间件process_spider_input(),并将调用请求errback。errbac

每个中间件组件都是一个Python类,它定义了以下一个或多个方法: 类scrapy.downloadermiddlewares.DownloaderMiddleware 注意 任何下载器中间件方法也可能返回延迟。 process_request(请求,蜘蛛) 对于通过下载中间件的每个请求,都会调用此方法。 process_request()应该:返回None,返回一个 Response对象,返回一个Request 对象,或者提升IgnoreRequest。 如果它返回None,Scrapy将继续处理此请求,执行所有其他中间件,直到最后,相应的下载程序处理程序被称为执行的请求(并且其响应已下载)

有时,对于大型网站,最好暂停抓取并稍后恢复。 Scrapy通过提供以下设施支持此功能: 一个调度程序,用于在磁盘上保留计划的请求 重复过滤器,用于保留磁盘上的访问请求 一个扩展,使一些蜘蛛状态(键/值对)在批次之间保持不变 工作目录 要启用持久性支持,您只需通过该设置定义作业目录JOBDIR。该目录将用于存储所有必需的数据以保持单个作业的状态(即蜘蛛运行)。重要的是要注意,这个目录不能由不同的蜘蛛共享,甚至不能由同一个蜘蛛的不同作业/运行共享,因为它意味着用于存储单个作业的状态。 如何使用 要启动支持持久性的蜘蛛,请按以下方式运行: scrapy crawl somespider -s JOB

内置异常参考 以下列出了Scrapy中包含的所有例外情况及其用法。 掉物品开关DROPITEM 异常scrapy.exceptions.DropItem 项目管道阶段必须引发的异常才能停止处理Item。有关更多信息,请参阅项目管道。 CloseSpider 异常scrapy.exceptions.CloseSpider(reason =’cancel’ ) 可以从蜘蛛回调中引发此异常,以请求关闭/停止蜘蛛。支持的参数: 参数: reason(str) – 关闭的原因 例如: def parse_page(self, response): if ‘Bandwi

链接提取器是对象,其唯一目的是从scrapy.http.Response最终将遵循的网页(对象)中提取链接。 目前scrapy.linkextractors.LinkExtractor在Scrapy,但您可以创建自己的自定义链接提取器通过一个简单的界面,以满足您的需求。 每个链接提取器唯一的公共方法是extract_links接收Response对象并返回scrapy.link.Link对象列表。链接提取器旨在实例化一次,并且extract_links使用不同的响应多次调用它们的方法以提取要遵循的链接。 链接提取器在CrawlSpider 类中使用(在Scrapy中可用),通过一组规则,但您也

响应对象 classscrapy.http.Response(url [,status = 200,headers = None,body = b”,flags = None,request = None ]) 甲Response对象表示的HTTP响应,这通常是下载(由下载器)并馈送到蜘蛛进行处理。 参数: url(字符串) – 此响应的URL status(整数) – 响应的HTTP状态。默认为200。 headers(dict) – 此响应的标头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。 body(字节) –

Scrapy使用Request和Response对象来抓取网站。 通常,Request对象在蜘蛛中生成并通过系统,直到它们到达下载器,下载器执行请求并返回一个Response对象,该对象返回发出请求的蜘蛛。 两者Request和Response类都有子类,它们添加了基类中不需要的功能。下面在Request子类和Response子类中描述了这些。 请求对象 classscrapy.http.Request(url [,callback,method =’GET’,headers,body,cookies,meta,encoding =’utf-8′

项目加载程序提供了一种方便的机制来填充已删除的项目。尽管可以使用他们自己的类字典API来填充项目,但是项目加载器通过自动执行一些常见任务(例如在分配原始提取数据之前解析原始提取数据),提供了一种更方便的API,用于从抓取过程中填充它们。 换句话说,Items提供了抓取数据的容器,而Item Loaders提供了填充该容器的机制。 项目加载器旨在提供灵活,高效和简单的机制,用于通过蜘蛛或源格式(HTML,XML等)扩展和覆盖不同的字段解析规则,而不会成为维护的噩梦。 使用项目加载器填充项目 要使用Item Loader,必须先实例化它。您可以使用类似dict的对象(例如Item或dict)实例化

提取数据 学习如何使用Scrapy提取数据的最佳方法是使用shell Scrapy shell尝试选择器。跑: scrapy shell ‘http://quotes.toscrape.com/page/1/’ 注意 当从命令行运行Scrapy shell时,请记住始终将URL括在引号中,否则包含参数(即&字符)的url 将不起作用。 在Windows上,请使用双引号: scrapy shell “http://quotes.toscrape.com/page/1/” 你会看到类似的东西: [ … Scrapy log here … ] 2016-09-19 12:09:27