Python 爬虫 (五) --多线程续 (Queue )

栏目: 编程语言 · Python · 发布时间: 8年前

内容简介:本文希望达到的目标:1.学习Queue模块。2.将Queue模块与多线程编程相结合。3.通过Queue和threading模块, 重构爬虫, 实现多线程爬虫。4.通过以上学习希望总结出一个通用的多线程爬虫小模版。

本文希望达到的目标:

  1. 学习Queue模块
  2. 将Queue模块与多线程编程相结合
  3. 通过Queue和threading模块, 重构爬虫, 实现多线程爬虫,
  4. 通过以上学习希望总结出一个通用的多线程爬虫小模版

1. Queue模块

Queue模块实现了多生产者多消费者队列, 尤其适合多线程编程.Queue类中实现了所有需要的锁原语(这句话非常重要), Queue模块实现了三种类型队列:

  • FIFO(先进先出)队列, 第一加入队列的任务, 被第一个取出
  • LIFO(后进先出)队列,最后加入队列的任务, 被第一个取出(操作类似与栈, 总是从栈顶取出, 这个队列还不清楚内部的实现)
  • PriorityQueue(优先级)队列, 保持队列数据有序, 最小值被先取出(在C++中我记得优先级队列是可以自己重写 排序 规则的, Python不知道可以吗)

1.1. 类和异常

1.2. Queue对象

三种队列对象提供公共的方法

下面是官方文档给多出的多线程模型:

2. Queue模块与线程相结合

简单写了一个Queue和线程结合的小程序

3. 重构爬虫

主要针对之间写过的豆瓣爬虫进行重构:

3.1. 豆瓣电影爬虫重构

通过对Queue和线程模型进行改写, 可以写出下面的爬虫程序 :

完整代码请查看Github豆瓣多线程爬虫
完成这个程序后, 又出现了新的问题:

无法保证数据的顺序性, 因为线程是并发的, 思考的方法是: 设置一个主线程进行管理, 然后他们的线程工作

4. 通用的多线程爬虫小模版

下面是根据上面的爬虫做了点小改动后形成的模板

我感觉其实这个多线程挺凌乱的, 希望以后自己能重构

5. 思考更高效的爬虫方法

  • 使用twisted进行异步IO抓取
  • 使用Scrapy框架(Scrapy 使用了 Twisted 异步网络库来处理网络通讯)

6. 参考链接


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆裂

爆裂

[美] 伊藤穰一、[美] 杰夫·豪 / 张培、吴建英、周卓斌 / 中信出版集团 / 2017-9-1 / 65.00元

越是在发生重大改变的时刻,越是会出现两极分化,赢家、输家有时只在一念间。未来已经装上了全新的操作系统。这是一个重大升级,对我们而言,随之而来的则是陡峭的学习曲线。在指数时代,替换旧逻辑,我们的思维亟需与世界对接,推翻过去已经成为大众所接受的常识,学会差异化思考才能屹立不倒,不被卷入历史的洪流。 在《爆裂》一书中,伊藤穰一和杰夫·豪将这一逻辑提炼为9大原则,帮助人们驾驭这一动荡时刻,应对当下的......一起来看看 《爆裂》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器