python爬虫中多线程的使用
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爬虫中多线程的使用相关推荐
- io密集型和cpu密集型_一次说明白Python爬虫中多线程,多进程,异步IO编程
图/文:迷神 我们在Python爬虫中,重要的是讲究速度,如果有10万或者100万Url地址,写过爬虫的都会知道,那估计是非常慢的.我们的Python爬虫一般IO密集型业务,Python爬虫程序需要发 ...
- python爬虫多线程是什么意思_python爬虫中多线程的使用详解
queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...
- python爬虫之多线程、多进程+代码示例
python爬虫之多线程.多进程 使用多进程.多线程编写爬虫的代码能有效的提高爬虫爬取目标网站的效率. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪 ...
- Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...
- python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...
原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...
- python爬虫用urllib还是reques,python爬虫中urllib.request和requests有什么区别?
在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其 ...
- python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例
生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...
- python爬虫框架怎么安装_celery如何在python爬虫中安装?
在我们学习了不少关于celery框架的知识后,很多小伙伴已经想要正式使用celery了.这里小编也不知道大家安装好了celery没有~为了照顾一下动手能力不太强的python小白,小编把celery框 ...
- Python爬虫中最重要、最常见、一定要熟练掌握的库
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 开始正文 Requests库是Python爬虫中最最最最最最重要与常见的库,一定要熟练掌握它. 下 ...
最新文章
- Linux 系统调用(二)——使用内核模块添加系统调用(无需编译内核)
- 图解VC++版PE文件解析器源码分析
- JAVA流程控制学习总结
- C++(STL):27 ---关联式容器set源码剖析
- (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。
- 大图社区搜索的调查综述(二)——预备知识
- Service Mesh 如何重定义云原生计算?阿里服务网格技术大揭秘
- 【解决方案】kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
- 5g和芯片有什么关系
- \xe8\x83\xa5\xe5\xb8\x85\xe6\x9d\xb0转中文
- matlab批量下载网页文件
- HTML5 Canvas组件绘制太极图案
- ‘gbk‘ codec can‘t decode byte 0xa7 in position 40: illegal multibyte sequenc
- 记录又一次实战GetShell
- 抽象类和抽象方法的特点
- 拆掉思维里的墙 读书笔记
- 设计一个车辆违章系统
- 时间序列_seasonal_decompose使用移动平均线进行季节性分解
- 密码学的随机性与区块链随机数
- meshing-网格加密