Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取(更确切来说,网络抓取)所设计的,也可以应用在获取API所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。
二、架构流程图接下来的图表展现了Scrapy的架构,包括组件及在系统中发生的数据流的概览(绿色箭头所示)。下面对每个组件都做了简单介绍,并给出了详细内容的链接。数据流如下所描述。
1、组件ScrapyEngine引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。详细内容查看下面的数据流(DataFlow)部分。
调度器(Scheduler)调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器(Downloader)下载器负责获取页面数据并提供给引擎,而后提供给spider。
SpidersSpider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。每个spider负责处理一个特定(或一些)网站。更多内容请看Spiders。
ItemPipelineItemPipeline负责处理被spider提取出来的item。典型的处理有清理、验证及持久化(例如存取到数据库中)。更多内容查看ItemPipeline。
下载器中间件(Downloadermiddlewares)下载器中间件是在引擎及下载器之间的特定钩子(specifichook),处理Downloader传递给引擎的response。其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看下载器中间件(DownloaderMiddleware)。
Spider中间件(Spidermiddlewares)Spider中间件是在引擎及Spider之间的特定钩子(specifichook),处理spider的输入(response)和输出(items及requests)。其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看Spider中间件(Middleware)。
2、数据流(Dataflow)Scrapy中的数据流由执行引擎控制,其过程如下:
引擎打开一个网站(openadomain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。
引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
引擎向调度器请求下一个要爬取的URL。
调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。
Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
引擎将(Spider返回的)爬取到的Item给ItemPipeline,将(Spider返回的)Request给调度器。
(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。
3、事件驱动网络(Event-drivennetworking)Scrapy基于事件驱动网络框架Twisted编写。因此,Scrapy基于并发性考虑由非阻塞(即异步)的实现。
关于异步编程及Twisted更多的内容请查看下列链接:
三、4步制作爬虫新建项目(scrapystartprojectxxx):新建一个新的爬虫项目
明确目标(编写items.py):明确你想要抓取的目标
制作爬虫(spiders/xxspder.py):制作爬虫开始爬取网页
存储内容(pipelines.py):设计管道存储爬取内容
四、安装框架这里我们使用conda来进行安装:
condainstallscrapy
或者使用pip进行安装:
pipinstallscrapy
查看安装:
?spiderscrapy-hScrapy1.4.0-noactiveprojectUsage:scrapy