个人对爬虫框架Scrapy的理解

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取的数据内容。Scrapy使用了Twisted一部网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

scrapy框架的工作流程:

  1. 首先Spider(爬虫)将需要发送请求的url(requests)经ScrapyEngine(引擎)交给Scheduer(调度器)。
  2. Scheduler(排序,入队)处理后,经ScrapyEngine(引擎),DownloaderMiddlewares(下载器中间件,可选,主要有User_Agent,Proxy代理)交给Downloader(下载器)。
  3. Downloader(下载器)向互联网发送请求,并接受下载响应(response)。将响应(response)经ScrapyEngine(引擎),SpiderMiddlewares(爬虫中间件,可选)交给Spiders(爬虫)。
  4. Spiders(爬虫)处理response(响应界面),提取数据并将数据经ScrapyEngineScrapyEngine(引擎)交给ItemPipeline保存(可以是本地,也可以是数据库)。提取url重新经ScrapyEngineScrapyEngine(引擎)交给Scheduler(调度器)进入下一个循环。直到无Url请求程序停止结束。

流程图:

个人对爬虫框架Scrapy的理解

优点:

  1. scrapy是异步的;
  2. 采取可读性更强的xpath代替正则;
  3. 强大的统计和log系统;
  4. 支持shell方式,方便独立调试;
  5. 写middleware,方便写一些统一的过滤器;
  6. 通过管道的方式存入数据库。

缺点:

  1. 基于python的爬虫框架,扩展性比较差;
  2. 基于 twisted 框架,运行中的 exception 是不会干掉 reactor(反应器),并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。