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

类scrapy.loader.SpiderLoader 该类负责检索和处理项目中定义的spider类。 可以通过在SPIDER_LOADER_CLASS项目设置中指定其路径来使用自定义蜘蛛装载程序 。它们必须完全实现scrapy.interfaces.ISpiderLoader接口以保证无错执行。 from_settings(设定) Scrapy使用此类方法来创建类的实例。它是使用当前项目设置调用的,它会加载在SPIDER_MODULES 设置模块中递归发现的蜘蛛。 参数: 设置(Settings实例) – 项目设置 load(spider_name ) 获取具有给定名称的Spid

每个中间件组件都是一个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将继续处理此请求,执行所有其他中间件,直到最后,相应的下载程序处理程序被称为执行的请求(并且其响应已下载)

响应对象 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′

Scrapy shell只是一个常规的Python控制台(如果有的话,它可以是IPython控制台),它提供了一些额外的快捷功能以方便使用。 可用的快捷方式 shelp() – 使用可用对象和快捷方式列表打印帮助 fetch(url[, redirect=True]) – 从给定的URL获取新响应并相应地更新所有相关对象。您可以选择要求HTTP 3xx重定向,然后不要传递redirect=False fetch(request) – 从给定请求中获取新响应并相应地更新所有相关对象。 view(response) – 在本地Web浏览器中打开给定的

蜘蛛是定义如何抓取某个站点(或一组站点)的类,包括如何执行爬行(即跟随链接)以及如何从其页面中提取结构化数据(即抓取项目)。换句话说,Spiders是您为特定站点(或者在某些情况下,一组站点)爬网和解析页面定义自定义行为的地方。 对于蜘蛛,刮擦周期经历如下: 首先生成初始请求以爬网第一个URL,并指定要使用从这些请求下载的响应调用的回调函数。 第一个执行请求是通过调用 start_requests()(默认情况下)为在请求中作为回调函数的方法中Request指定的URL start_urls和parse方法生成的 方法获得的。 在回调函数中,您解析响应(网页)并返回带有提取的数据,Item对象

提取数据 学习如何使用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

引擎盖下发生了什么? Scrapy会调度Spider方法scrapy.Request返回的对象start_requests。在收到每个响应后,它实例化Response对象并调用与请求相关的回调方法(在本例中为 parse方法),将响应作为参数传递。 start_requests方法的快捷方式 您可以只使用URL列表定义类属性,而不是实现从URL start_requests()生成scrapy.Request对象的方法start_urls。然后,默认实现将使用此列表start_requests()来为您的spider创建初始请求: import scrapy class QuotesSpide