如果觉得文章对您产生帮助的话, 欢迎关注Python开发之路(微信公众号: python-developer), 及时获取更多教程
关于scrapy基本的用法, 基本就讲完了, 这一章开始, 就讲一些相对来说比较实用的教程了. 第七章主要也是讲分布式的爬虫, 在大型爬虫里是必须掌握的方式
我们在开发爬虫时, 有时需要做大规模的爬虫, 单机的抓取速度非常受限, 所以就需要用分布式爬虫来提升速度
scrapy-redis
作为官方推荐的分布式开发方案, 所以也是想从事爬虫工作的小伙伴必须学会的
scrapy-redis
依赖于redis
来做任务队列, 无论哪个爬虫服务器, 都可以从指定的队列中获取到任务来爬取, 当抓取的任务数量提升以后, 也可以通过增加服务器来提升抓取速度。
scrapy-redis
的运行流程
- 将第一个任务写入到redis中,
- scrapy-redis的调度器监听任务队列, 并且交给下载器完成下载
- 当遇到
yield Request
或yield FormRequest
之类的, scrapy-redis会把Request
对象pick up
(序列化)后存入redis中. - 如果指定pipline是scrapy-redis的pipeline, 并且遇到
yield item
, 则将item
也存入redis中. 自己编写脚本从redis中读取抓取到的item
scrapy-redis
的优势:
- 分布式爬虫, 可扩展性好
- 性能高, 队列实现是redis, 高效
- 爬虫编写方式基本不变, 之前的单机爬虫可以直接改成分布式
现在我们就来写一个简单的分布式爬虫