我入门Python编程的一个习作:Python多线程下载昵图网的清晰预览图。

目前昵图网(nipic.com)没有限制爬虫,可以用requests来快速打开页面和下载图片。

注意:本文只是示范多线程下载比较清晰的预览图,图片边长最大1024像素,不是下载会员资源,也不是下载设计图的原稿。

比如一个缩略图的链接格式是:https://pic1.ntimg.cn/pic/20220719/4244141_213528444101_4.jpg

对应的清晰预览图链接是:https://pic.ntimg.cn/file/20220719/4244141_213528444101_2.jpg

生成清晰预览图链接的思路是先把缩略图链接用split('/')分开几个小段,然后再拼接字符串。

下面的代码是下载昵图网的七夕主题素材的预览图,下载范围是1~10页,开启10个线程,每个线程打开一个缩略图页面,然后逐个下载预览图。

多线程的代码参考了runoob.com的教程,教程链接在:Python3 多线程

## 线程优先级队列( Queue)
## Python 的 Queue 模块中提供了同步的、线程安全的队列类,
## 包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,
## 和优先级队列 PriorityQueue。
## 这些队列都实现了锁原语,能够在多线程中直接使用,
## 可以使用队列来实现线程间的同步。import queue
import threading
import requests
import re
import osexitFlag = 0class myThread (threading.Thread):def __init__(self, threadID, name, q):threading.Thread.__init__(self)self.threadID = threadIDself.name = nameself.q = qdef run(self):print (f"开启线程:{self.name}")process_data(self.name, self.q)print (f"退出线程:{self.name}")def process_data(threadName, q):while not exitFlag:queueLock.acquire()if not workQueue.empty():url = q.get()queueLock.release()# 打开缩略图链接,每个线程下载一个页面的所有大图small_list=[]res=se.get(url,headers=headers).text# 查找缩略图的链接small_list=re.findall('data-original="(.*?)"',res)print (f"线程{threadName}下载{len(small_list)}个图片……")# 清晰预览图big_url=''# 记录是否有重复文件repeat_file=0for i in small_list:split_list=i.split('/')big_url='https://pic.ntimg.cn/file/'+split_list[4]+'/'+split_list[5][:-5]+'2.jpg'filepath=outputpath+'\\'+split_list[5][:-5]+'2.jpg'# 重复的文件不用下载if os.path.lexists(filepath): repeat_file+=1continuef=open(filepath,'wb')c=se.get(big_url,headers=headers)f.write(c.content)f.close()if repeat_file>0: print (f"线程{threadName}发现{repeat_file}个重复的图片。")else:queueLock.release()# 主程序
# 设定输出路径
outputpath=r'e:\temp\七夕'
if not os.path.exists(outputpath): os.mkdir(outputpath)# 设定请求头、session
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',}
se = requests.session()# 昵图网的七夕主题素材链接
start_url='https://soso.nipic.com/?q=%E4%B8%83%E5%A4%95&g=1&or=0&y=60&page='
# 设定起始页和结束页
startpage=1
lastpage=10
# 定义10线程
threadList = range(10)# 添加缩略图的页面链接到linkList
linkList=[]
for pages in range(startpage,lastpage+1):linkList.append(start_url+str(pages))
queueLock = threading.Lock()
workQueue = queue.Queue(10)
threads = []
threadID = 1# 创建新线程
for tName in threadList:thread = myThread(threadID, tName, workQueue)thread.start()threads.append(thread)threadID += 1# 把缩略图的页面链接填充到队列
queueLock.acquire()
for k in linkList:workQueue.put(k)
queueLock.release()# 等待队列清空
while not workQueue.empty():pass# 通知线程是时候退出
exitFlag = 1# 等待所有线程完成
for t in threads:t.join()
print ("退出主线程")

运行结果截图:

Python实现多线程批量下载昵图网的清晰预览图相关推荐

  1. python利用多线程批量下载高清美女图片(350秒下载近3600张1.2个G的照片,地址可变)

    目录 第一章.前言 1.1.实现的效果: 1.2.需要用到的库: 第二章.代码分块讲解 2.1.对象的定义和初始化 2.2.方法1和2获取所有图集链接 2.2.1. 对应网站结构 2.2.2 .相应代 ...

  2. java实现文件下载,批量下载,文件在线预览,word转pdf,excel转pdf

    pdf,excel转word所需jar包  网盘链接  提取码:4gmw 目录 1.在resources下新建license.xml 2.文件转换工具类 3.文件下载 4.批量下载 5.在线打开文件 ...

  3. 利用Python编写脚本批量下载公众号中的音频

    欢迎大家光临我的博客,大家一起交流学习哦 陈京九的博客 首先声明我只是一个小菜鸡,把自己琢磨一些功能的过程发到了这里当做记录,希望大神们轻喷,能给我一些指导就更好啦~ 上一篇博客教大家下载了公众号中的 ...

  4. python爬虫+ffmpeg批量下载ts文件,解密合并成mp4

    标题 python爬虫+ffmpeg批量下载ts文件,解密合并成mp4 文章目录 标题 前言 一.分析目标 二.寻找url规律 三.写代码 总结 前言 (第一次写博客,写的不好请见谅哈~~) 目标是大 ...

  5. python爬虫实现批量下载百度图片

    今天和小伙伴们合作一个小项目,需要用到景点图片作为数据源,在百度上搜索了一些图片,感觉一个一个手动保存太过麻烦,于是想到用爬虫来下载图片. 本次代码用到了下列一些python模块,需要预先安装Beau ...

  6. python上市公司_Python批量下载上交所上市公司报告

    上交所的上市公司报告搜索页面http://www.sse.com.cn/disclosure/listedinfo/announcement/ 通过查看页面调用的接口可以发现: 获取上交所全部股票代码 ...

  7. Python实现壁纸批量下载

    Python实现壁纸批量下载 最近想要一些新的壁纸,但是从网站上面找一张一张下载太慢了,所以写了个爬虫批量下载壁纸. 先看看实现的效果 需要的包: requests.bs4 .os.re 源码: # ...

  8. 使用axel多线程批量下载文件

    axel是一个支持多线程的命令行下载工具. Usage: axel [options] url1 [url2] [url...]#常用到的参数 -s x 指定最大速率(每秒字节) -n x 指定最大连 ...

  9. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

最新文章

  1. 一维码Code 93简介及其解码实现(zxing-cpp)
  2. Struts1.x系列教程(4):标签库概述与安装
  3. pandas使用pct_change计算数据列的百分比变化、环比变化率:计算当前元素和前一个元素之间的百分比变化、使用style函数指定format的格式:百分比、缺失值替换、用颜色标注极大值和极小值
  4. 使用struts2制作后台中的问题记录
  5. PHP mail()可能导致的问题
  6. [html] 如何给table中的某一列设置固定宽度
  7. 18.linux日志收集数据到hdfs上面
  8. 用jquery动态添加form表单
  9. 组合体计算机绘图的实验原理,机械制图及计算机绘图
  10. PS:oracle恢复删除的数据
  11. Windows 2003 网络负载均衡的详细配置文档
  12. 当有脚本错误时,停止运行。
  13. 2017CCPC哈尔滨 F:Permutation(构造)
  14. WMI 查询分析工具更新
  15. 数据库基础(常用SQL语句)
  16. java numberformat_java 之 格式化输出 NumberFormat
  17. 超声波测深仪工作原理
  18. 数据结构(计算机存储、组织数据方式)
  19. 关于MD5的那点事,你都了解清楚了吗?
  20. 进程已结束,退出代码-1073740791 (0xC0000409)

热门文章

  1. PythonGUI颜色扩散游戏
  2. 矢量数据shp七个文件介绍_Arcmap入门(五)——矢量数据的提取分析(裁剪+分割)...
  3. python的永久存储——pickle‘泡菜’ ,‘腌制’天气查询脚本
  4. 2020秋季甲级PAT 7-4 Professional Ability Test (30 分)
  5. 微信小程序开发分析总结
  6. Python 手把手教你爬取淘宝的笔记本电脑数据
  7. linux5关闭apic服务,Linux中断 - APIC
  8. Python:将Word转成HTML
  9. windows中合并磁盘
  10. 招商银行笔试题之跳格子游戏