python爬虫中多线程的使用详解


Posted in Python onSeptember 23, 2019

queue介绍

queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue。python3直接queue即可

在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

#多线程实战栗子(糗百)
#用一个队列Queue对象,
#先产生所有url,put进队列;
#开启多线程,把queue队列作为参数传入
#主函数中读取url
import 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:
      break
    print('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 = 4
  for 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))

总结

以上所述是小编给大家介绍的python爬虫中多线程的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现2048小游戏
Mar 30 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
对python3标准库httpclient的使用详解
Dec 18 Python
Mac安装python3的方法步骤
Aug 09 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
matplotlib阶梯图的实现(step())
Mar 02 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 #Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 #Python
Python 单例设计模式用法实例分析
Sep 23 #Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 #Python
详解Python3定时器任务代码
Sep 23 #Python
python应用文件读取与登录注册功能
Sep 23 #Python
Python爬虫 urllib2的使用方法详解
Sep 23 #Python
You might like
php统计时间和内存使用情况示例分享
2014/03/13 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python实现合并两个数组的方法
2015/05/16 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
一篇.NET面试题
2014/09/29 面试题
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
采购文员岗位职责
2013/11/20 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
公司授权委托书范文
2014/09/21 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
停水通知
2015/04/16 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书