scrapy爬虫框架

Scrapy爬虫框架

回顾之前的学习:

  • requests是一个自动爬取html页面并自动网络请求和提交的库

  • robots.txt则是网络爬虫排除标准

  • beautiful soup提供了解析html页面的功能

  • Re正则表达式帮助提取页面关键信息

  • 而scrapy则是专业的爬虫框架!

    scrapy爬虫框架结构:

  • Scrapy不是一个函数功能库,而是一个爬虫框架。

  • 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
  • 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。

“5+2”结构:

1

1 Engine从Spider处获得爬取请求(Request)

2 Engine将爬取请求转发给Scheduler,用于调度

3 Engine从Scheduler处获得下一个要爬取的请求

4 Engine将爬取请求通过中间件发送给Downloader

5 爬取网页后,Downloader形成响应(Response) 通过中间件发给Engine

6 Engine将收到的响应通过中间件发送给Spider处理

7 Spider处理响应后产生爬取项(scraped Item) 和新的爬取请求(Requests)给Engine

8 Engine将爬取项发送给Item Pipeline(框架出口)

9 Engine将爬取请求发送给Scheduler

Engine控制各模块数据流,不间断从Scheduler处 获得爬取请求,直至请求为空

框架入口:Spider的初始爬取请求

框架出口:Item Pipeline

其中, schedule和downloader和engine都是已有实现了的,只有item pipelines和spiders需要用户编写配置。

scrapy爬虫框架解析:

Engine

(1)控制所有模块之间的数据流

(2)根据条件触发事件

不需要用户修改

Downloader

根据请求下载网页

不需要用户修改

Scheduler

对所有爬取请求进行调度管理

不需要用户修改

Downloader Middleware

目的:实施Engine、Scheduler和Downloader 之间进行用户可配置的控制

功能:修改、丢弃、新增请求或响应

用户可以编写配置代码

Spider

(1)解析Downloader返回的响应(Response)

(2)产生爬取项(scraped item)

(3)产生额外的爬取请求(Request)

需要用户编写配置代码

Item Pipelines

(1)以流水线方式处理Spider产生的爬取项

(2)由一组操作顺序组成,类似流水线,每个操 作是一个Item Pipeline类型

(3)可能操作包括:清理、检验和查重爬取项中 的HTML数据、将数据存储到数据库

需要用户编写配置代码

Spider Middleware

目的:对请求和爬取项的再处理 功能:修改、丢弃、新增请求或爬取项

用户可以编写配置代码

requests库和scrapy爬虫的比较:

相同点:

  • 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
  • 两者可用性都好,文档丰富,入门简单
  • 两者都没有处理js、提交表单、应对验证码等功能(可扩展)

requests:

  • 页面级爬虫
  • 功能库
  • 并发性考虑不足,性能较差
  • 重点在于页面下载
  • 定制灵活
  • 上手十分简单

scrapy:

  • 网站级爬虫
  • 框架
  • 并发性好,性能较高
  • 重点在于爬虫结构
  • 一般定制灵活,深度定制困难
  • 入门稍难

非常小的需求,requests库

不太小的需求,Scrapy框架

定制程度很高的需求(不考虑规模),自搭框架,requests > Scrapy

scrapy命令行:

Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行

>scrapy<command> [options] [args]

2

Donate? comment?