queue介绍

  • queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue。python3直接queue即可
  • 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

#多线程实战栗子(糗百)
#用一个队列Queue对象,
#先产生所有url,put进队列;
#开启多线程,把queue队列作为参数传入
#主函数中读取urlimport requests
from queue import Queue
import re,os,threading,time
# 构造所有ip地址并添加进queue队列
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
urlQueue = Queue()
[urlQueue.put('http://www.qiumeimei.com/image/page/{}'.format(i)) for i in range(1,14)]
def get_image(urlQueue):while True:try:# 不阻塞的读取队列数据url = urlQueue.get_nowait()# i = urlQueue.qsize()except Exception as e:breakprint('Current Thread Name %s, Url: %s ' % (threading.currentThread().name, url))try:res = requests.get(url, headers=headers)url_infos = re.findall('data-lazy-src="(.*?)"', res.text, re.S)for url_info in url_infos:if os.path.exists(img_path + url_info[-20:]):print('图片已存在')else:image = requests.get(url_info, headers=headers)with open(img_path + url_info[-20:], 'wb') as fp:time.sleep(1)fp.write(image.content)print('正在下载:' + url_info)except Exception as e:print(e)if __name__ == '__main__':startTime = time.time()# 定义图片存储路径img_path = './img/'if not os.path.exists(img_path):os.mkdir(img_path)threads = []# 可以调节线程数, 进而控制抓取速度threadNum = 4for i in range(0, threadNum):t = threading.Thread(target=get_image, args=(urlQueue,))threads.append(t)for t in threads:t.start()for t in threads:# 多线程多join的情况下,依次执行各线程的join方法, 这样可以确保主线程最后退出, 且各个线程间没有阻塞
        t.join()endTime = time.time()print('Done, Time cost: %s ' % (endTime - startTime))

转载于:https://www.cnblogs.com/nmsghgnv/p/11571712.html

python爬虫中多线程的使用相关推荐

  1. io密集型和cpu密集型_一次说明白Python爬虫中多线程,多进程,异步IO编程

    图/文:迷神 我们在Python爬虫中,重要的是讲究速度,如果有10万或者100万Url地址,写过爬虫的都会知道,那估计是非常慢的.我们的Python爬虫一般IO密集型业务,Python爬虫程序需要发 ...

  2. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  3. python爬虫之多线程、多进程+代码示例

    python爬虫之多线程.多进程 使用多进程.多线程编写爬虫的代码能有效的提高爬虫爬取目标网站的效率. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪 ...

  4. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  5. python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...

    原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...

  6. python爬虫用urllib还是reques,python爬虫中urllib.request和requests有什么区别?

    在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其 ...

  7. python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例

    生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...

  8. python爬虫框架怎么安装_celery如何在python爬虫中安装?

    在我们学习了不少关于celery框架的知识后,很多小伙伴已经想要正式使用celery了.这里小编也不知道大家安装好了celery没有~为了照顾一下动手能力不太强的python小白,小编把celery框 ...

  9. Python爬虫中最重要、最常见、一定要熟练掌握的库

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 开始正文 Requests库是Python爬虫中最最最最最最重要与常见的库,一定要熟练掌握它. 下 ...

最新文章

  1. Linux 系统调用(二)——使用内核模块添加系统调用(无需编译内核)
  2. 图解VC++版PE文件解析器源码分析
  3. JAVA流程控制学习总结
  4. C++(STL):27 ---关联式容器set源码剖析
  5. (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。
  6. 大图社区搜索的调查综述(二)——预备知识
  7. Service Mesh 如何重定义云原生计算?阿里服务网格技术大揭秘
  8. 【解决方案】kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
  9. 5g和芯片有什么关系
  10. \xe8\x83\xa5\xe5\xb8\x85\xe6\x9d\xb0转中文
  11. matlab批量下载网页文件
  12. HTML5 Canvas组件绘制太极图案
  13. ‘gbk‘ codec can‘t decode byte 0xa7 in position 40: illegal multibyte sequenc
  14. 记录又一次实战GetShell
  15. 抽象类和抽象方法的特点
  16. 拆掉思维里的墙 读书笔记
  17. 设计一个车辆违章系统
  18. 时间序列_seasonal_decompose使用移动平均线进行季节性分解
  19. 密码学的随机性与区块链随机数
  20. meshing-网格加密

热门文章

  1. 抖音平台带货的前提条件是什么?简智音给你答案
  2. 关于Modelsim SE软件Fatal License Error的解决方法
  3. 【毕设精选】算法类毕设相关系统
  4. 有一种只能相爱却不能相守的情====绝对转载
  5. 在多线程中输出时间戳是否会重复
  6. 什么是懒加载,如何实现图片或列表懒加载?
  7. 提示libface.dll找不到
  8. 7个标准--选安全靠谱的聚合支付公司!
  9. (每日一练python)两数相除
  10. 金蝶云星空对接打通四化智造MES(API)逐个单据查询接口与新增订单接口