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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
python在多玩图片上下载妹子图的实现代码
Aug 13 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
Python中的list与tuple集合区别解析
Oct 12 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 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/06/03 PHP
php去掉文件前几行的方法
2015/07/29 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
详解python 注释、变量、类型
2018/08/10 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python猴子补丁知识点总结
2020/01/05 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
python 一维二维插值实例
2020/04/22 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
python openssl模块安装及用法
2020/12/06 Python
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
小学校园活动策划
2014/01/30 职场文书
购房协议书范本
2014/04/11 职场文书
护士个人年终总结
2015/02/13 职场文书
七个Python必备的GUI库
2021/04/27 Python
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
手残删除python之后的补救方法
2021/06/26 Python
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
Python PIL按比例裁剪图片
2022/05/11 Python