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进阶教程之动态类型详解
Aug 30 Python
举例讲解Python中的算数运算符的用法
May 13 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
python实现求特征选择的信息增益
Dec 18 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
python如何将两个txt文件内容合并
Oct 18 Python
python开根号实例讲解
Aug 30 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源代码安装常见错误与解决办法分享
2013/05/28 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
全面解析标签页的切换方式
2016/08/21 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Python中按值来获取指定的键
2019/03/04 Python
python制作图片缩略图
2019/04/30 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
python线程池如何使用
2020/05/28 Python
python中selenium库的基本使用详解
2020/07/31 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
python代码实现猜拳小游戏
2020/11/30 Python
销售自荐信
2013/10/22 职场文书
营销总经理岗位职责
2014/02/02 职场文书
师范生见习报告范文
2014/11/03 职场文书
会计稽核岗位职责
2015/04/13 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
经典爱情感言
2015/08/03 职场文书
医院病假条怎么写
2015/08/17 职场文书
高二语文教学反思
2016/02/16 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书