这一节有点无聊, 更多的就是个介绍, 以及优缺点之类的, 然后让你自己确定学不学, 如果你接触过, 不看也行, 反正我也觉得没啥用。
一、scrapy介绍
scrapy底层使用的是twisted框架, 所以是异步抓取的一个框架, 其他的没啥介绍的了。
但是scrapy和requests或者别的框架有什么区别呢? 如何去选择呢?
scrapy的优势:
- 已经帮你完成了请求, 下载,以及请求失败重试, 统计
- 使你写爬虫更加规范化
- 性能很好(除非自己写出来阻塞)
- 扩展性好, 而且附加的库也比较多, 比如代理、缓存、以及管理web都比较多
scrapy的缺点:
- 上手难度比较大, 要学的东西比较多, 不熟悉的话很容易写出来性能很弱的代码
- 特定的情况不好处理, 比如需要运行js(scrapy-splash没那么简单, 而且你会发现限制很大), 模拟浏览器运行, 特殊情况的模拟登录
- 分布式的支持, 目前只有scrapy-redis, 如果你想换别的消息队列, 比如scrapy-rabbitmq 之类的, 放心, 基本没有的, 找到的也没人维护
总结:
- 如果学好scrapy的情况下, 很多都可以自己写扩展, 来完成特定的需求
- 只有真正完全熟悉了scrapy, 才能写出来高性能的爬虫
- 爬虫不是把数据抓下来就完事儿了, 实际情况的爬虫远比想象的复杂的多, 尤其是分布式爬虫
- 爬虫的难度不只有反爬, 更多的是网络情况, 以及规模大的情况
二、scrapy的架构图
![457687529d5e60f595845dab7b7eca35.png](https://i-blog.csdnimg.cn/blog_migrate/4b72466f87a2251b589ae47ee22ea89e.jpeg)
这就是scrapy官方的一个架构图, 看起来有点乱, 但是还挺好理解
简单来说, 就是
- Spiders(爬虫, 你编写的业务代码), 把Request(请求)扔给(Engine)引擎, 引擎扔给Scheduler(调度器)
- 调度器把请求给Downloader(下载器), 下载器完成请求, 然后返回给爬虫
- 爬虫把解析的数据扔给Pipeline(管道), Pipeline把数据导出或者保存起来
Item其实就是对抓取数据的一种规范化, 并且scrapy 提供了Item Loader来对Item里的数据进行处理
所以其实我们用的最多的就是
- Spiders(爬虫), 写实际的业务代码
- Item, 定义数据的结构
- Pipeline, 保存或者导出数据
- Spider Middleware(爬虫中间件), 对爬虫发起的请求、Item, 以及返回的数据进行进一步处理
- Downloader Middlewares(下载器中间件), 对请求和下载完的数据进行进一步处理
其实主要学会这几块, scrapy也就差不多了。
欢迎关注Python开发之路(微信号: python-developer)