Python爬虫学习(五)

        前几篇博文写的都是单机版爬虫,但是该单机版存在一些明显的问题:

        1)无法保存爬虫的中间状态。如果爬到一半突然断电程序挂了,难道又要从0开始?而且很多主题爬虫根本就没有结束的时候,一直处于运行状态。

        2)单机单线程版存在明显的性能瓶颈,可通过改为多线程多进程提高效率。

        3)其队列、去重集合都是程序变量,容量有限,存在溢出风险。

        针对上述问题,楼主引进Redis和Mongodb,并将爬虫改为分布式版本,可有效提升效率和稳定性(Mongodb暂时没用上,还是直接存文件),程序源码链接:https://github.com/yhangang/DSpider。其目录结构如下:


        其中,master包下面存储主节点的代码,slave包下面存储工作节点代码,tool包存储工具类,spider.conf是全局配置文件。在运行前需要安装依赖包:

pip install requests
pip install beautifulsoup4

pip install redis

        具体的代码就不贴出来了,可去github上获取。其原理是主节点使用redis存储待爬队列和已爬集合,其他结点线程从redis获取信息进行工作,Redis会对中间结果做持久化,不怕断电。Redis底层的原子操作,保证程序不会出现线程安全类问题。


猜你喜欢

转载自blog.csdn.net/u010227646/article/details/80014859