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

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

内容简介:本文希望达到的目标: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. 参考链接


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

查看所有标签

猜你喜欢:

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

失控

失控

[美]凯文·凯利(Kevin Kelly) / 张行舟 等 / 译言·东西文库/电子工业出版社 / 2016-1 / 89.00元

《失控:全人类的最终命运和结局》(全新修订本)是一部思考人类社会(或更一般意义上的复杂系统)进化的“大部头”著作,对于那些不惧于“头脑体操”的读者来说,必然会开卷有益。 “大众智慧、云计算、物联网、虚拟现实、网络社区、网络经济、协作双赢、电子货币……我们今天所知的,绝大多数是我们二十年前就已知的,并且都在这本书中提及了。”——凯文·凯利 《失控》成书于1994年,2010年中文版首次面......一起来看看 《失控》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码