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. 参考链接


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

查看所有标签

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

结网

结网

王坚 / 人民邮电出版社 / 2010-4 / 55.00元

本书作者一直从事互联网产品的研究和实战,经验丰富,同时作为导师,指导了大量优秀的产品经理,本书的内容也是作者8年来培养产品经理新兵的经验集萃。如果你缺乏培养产品经理的教材,本书正好总结了产品经理知识体系,无疑是你很好的选择。 本书覆盖了相当全面的互联网知识,对于想要了解互联网行业或想要借助互联网进行营销的人来说,都是很好的入门读物。 本书并不是一本完善的互联网创业指南,而是写给胸怀互联......一起来看看 《结网》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具