Scray是一个功能强大且非常快速的爬虫框架,具体学习它的基本使用。
一、scrapy介绍
scrapy:它是一个爬虫框架结构,它包含了五个模块和两条之间线路:
主要模块:
模块 | 描述 |
---|---|
SPIDERS | 发送请求,处理响应,需要用户自己编写(配置) |
ENGINE | 接受request请求并大宋到SCHEDULER模块 |
SCHEDULER | 调度请求,向ENGINE发送真实的请求 |
DOWNLOADER | 连接互联网,爬取相关网页,生成response对象 |
ITEM PIPELINES | 手机爬取得到的内容,需要用户自己编写(配置) |
二、框架模块介绍
Engine模块
- 控制所有模块之间的数据流
- 根据条件触发事件
- 不需要用户修改
Downloader模块
- 根据请求下载网页
- 不需要用户修改
Scheduler模块
- 对于所有爬取请求进行管理调度
- 不需要用户修改
Spider模块
- 解析Downloader返回的response响应
- 产生爬取项(scpaped item)
- 产生额外的爬取请求(request)
Downloader Middleware模块
- 一流水线的方式处理Spider产生的爬取项
- 由一组操作顺序组成,类似流水线,每一个操作是一个Item Pipeline类型
- 可能的操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库
Downloader Middleware模块
目的:实现Engine、scheduler和downloader之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应
Spider Middleware模块
目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项
三、requests 和 scrapy
对比差异:
requests | scrapy |
---|---|
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发性考虑不足 | 并发性好,性能较高 |
重点在于页面下载 | 字典在于爬虫框架 |
定制灵活 | 深度定制困难 |
上手十分简单 | 入门稍难 |
如何选择:
requests:只需要下载某个页面的局部内容时选择request构建小型爬虫
scrapy :当需要批量下载网站各个页面时,考虑使用scrapy
四、scrapy命令行
scrapy是为了持续运行设计的专业爬虫框架,提供操作的scrapy命令行
命令行格式:
> scrapy <command> [options] [args]
scrapy命令:
命令 | 说明 | 格式 |
---|---|---|
startproject | 创建一个新工程 | scrapy startproject <name> [dir] |
genspider | 创建一个爬虫 | scrapy genspider [options] <name> <domain> |
crawl | 运行一个爬虫 | scrapy crawl <spider> |
settings | 获取爬虫配置信息 | scrapy settings [options] |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动该URL调试命令 | scrapy shell [url] |
scrapy命令行逻辑:
为什么scrapy采用命令行创建和运行爬虫?
- 命令行更容易自动化,适合脚本控制
- 本质上,scrapy是给程序员用的,功能(比界面)更重要
五、scrapy爬虫基本使用
scrapy使用步骤:
step1:创建一个工程和Spider模板
step2:编写Spider
step3:编写Item Pipeline
step4:优化配置策略
Scrapy爬虫的数据类型:
Request类:
class scrapy.http.Request()
- Request对象表示一个HTTP请求
- 由Spider生成,由Downloader执行
属性/方法 | 描述 |
---|---|
.url | Request对应的请求URL地址 |
.method | 对应的请求方法,’ GET’ ‘POST’ 等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主题,字符串类型 |
.meta | 用户添加的扩展信息,在Scrapy内部模块键传递信息使用 |
.copy() | 复制该请求 |
Response类:
class scrapy.http.Response()
- Response对象表示一个HTTP响应
- 有Downloader生成,由Spider处理
属性/方法 | 描述 |
---|---|
.url | Request对应的请求URL地址 |
.status | HTTP状态名,默认值为200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Request类型对应的Request对象 |
.copy() | 复制该响应 |
Item类:
class scrapy.item.Item()
- Item对象表示一个从HTML页面中提取的信息内容
- 由Spider生成,由Item Pipeline处理
- Item类似字典类型,可以按照字典类型操作
第九篇python爬虫学习笔记完结啦 cheers ??