scrapy框架
初学scrapy框架,做下笔记
#scrapy爬虫框架结构
- (一).爬虫框架:爬虫框架是实现爬虫功能的一个软件结构和功能组价集合
爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫
- (二).“5+2”结构
#scrapy爬虫框架解析
Engine模块(不需要用户修改):控制所有模块之间的数据流,根据条件触发事件
Downloader模块(不需要用户修改):根据请求下载网页
Scheduler模块(不需要用户修改):对所有爬取请求进行调度管理
Downloader Middleware中间键
目的:实施Engine,Scheduler和Downloader之间进行用户可配置的控制
功能:修改,丢弃,新增请求或响应
用户可以编写配置代码
Spider模块(需要用户编写配置代码)
- 解析Downloader返回的响应(Response)
- 产生爬取项(scraped item)
- 产生额外的爬取请求(Request)
Item Pipelines模块(需要用户编写配置代码)
- 以流水线方式处理Spider产生的爬取项
- 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
- 可能操作包括:清理,检验和查重爬取项中的HTML数据,将数据存储到数据库
Spider Middleware中间键
目的:对请求和爬取项的再处理
功能:修改,丢弃,新增请求或爬取项
用户可编写配置代码
#requests库和Scrapy爬虫的比较
requests vs. Scrapy
相同点
两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没用处理js、提交表单、应对验证码等功能(可扩展)
不同点
requests | scrapy |
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发性不足,性能较差 | 并发性好,性能较高 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般定制灵活,深度定制困难 |
上手简单 | 入门稍难 |
如果是非常小的需求,requests库
不太小的需求,scrapy框架
#scrapy爬虫常用命令
scrapy strartproject name | 创建一个name的工程 |
scrapy genspider pc | 创建一个爬虫 |
scrapy settings | 获得爬虫配置信息 |
scrapy crawl <spider> | 运行一个爬虫 |
scrapy list | 列出工程中所有爬虫 |
scrapy shell [url] | 启动url调试命令行 |
#yield关键字的使用
yield——生成器
- 生成器是一个不断产生值的函数
- 包含yield语句的函数是一个生成器
- 生成器每一次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
优势,更节省存储空间,响应更加迅速,使用更灵活
#scrapy爬虫的基本使用
Scrapy爬虫的使用步骤
步骤1:创建一个工程和Spider模板
步骤2:编写Spider
步骤3:编写Item Pipeline
步骤4:优化配置策略
Scrapy爬虫的数据类型
Request类;Response类:Item类
Request类
class scrapy.http.Request()
- Request对象表示一个HTTP请求
- 由Spider生成,由Downloader执行
属性或方法 | 说明 |
.url | requests对应的请求url地址 |
.method | 对应的请求方法,‘GET’'POST'等 |
.headers | 字典类型分格的请求头 |
.body | 请求内容的主体,字符串类型 |
.meta | 用户添加的扩展信息,在scrapy内部模块间传递信息的使用 |
.copy() | 复制该请求 |
Response类
class scrapy.http.Response()
- Response对象表示一个HTTP响应
- 由Downloader生成,由Spider处理
属性或方法 | 说明 |
.url | response对应的url地址 |
.status | HTTP状态码,默认是200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容的信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Response类型对应的Requests对象 |
.copy() | 复制该响应 |
Item类
class scrapy.item.Item()
- Item对象表示一个从HTML页面中提取的信息内容
- 由Spider生成,由Item Pipeline处理
- Item类似字典类型,可以按照字典类型操作
Scrapy爬虫提取信息的方法
Scrapy爬虫支持多种HTML信息提取方法
- Beautiful Soup
- lxml
- re
- XPath Selector
- CSS Selector
CSS Selector的基本使用
未完待续~