本帖最后由 学海AoA无涯 于 2020-8-18 00:53 编辑
print(‘hello,吾爱吾爱’)
今天学习了一下多线程
先来7行代码,再说正事
[Python] 纯文本查看 复制代码 import requests
for i in range(1, 12000):
picurl = 'https://gitee.com/kevin2046/picture/raw/master/img/' + str(i) + '.jpg'
print('(≧^.^≦)喵~~~正在下载:' + str(i) + '.jpg')
pic = requests.get(picurl).content
with open(str(i) + '.jpg', 'wb') as f:
f.write(pic)
EXE打包文件https://wwe.lanzouj.com/iNVhKfqkhxg
说正事:多线程
我还没有完全搞明白多线程到底怎么回事
请大佬指点指点多线程
试了一下,发现爬虫速度确实要比我之前下载的速度快不少
这是在7行代码的基础上研究的
发文之前写了注释,不想打字了,看注释吧
代码致上
[Python] 纯文本查看 复制代码 import threading # 导入多线程库
import requests
import os
'''
URL替换:
https://gitee.com/kevin2046/picture/raw/master/img/
https://gitee.com/kevin2046/pic/raw/master/img/
https://gitee.com/kevin2046/pict/raw/master/img
https://gitee.com/kevin2099/pict/raw/master/img/
https://gitee.com/kevin2099/pic/tree/master/img/
https://gitee.com/kevin2099/tupian/tree/master/img/
https://gitee.com/kevin2099/tu/tree/master/img/
'''
i = 0 # 先定义一个全局变量i,用于猜测图片的ID
def get_pic(i) : # 定义下载图片的函数
# 拼接图片URL,将主函数while中的i传到这里,相当于是图片的ID
picurl = 'https://gitee.com/kevin2046/picture/raw/master/img/' + str(i) + '.jpg'
if os.path.exists('图片\\%s.jpg'%i): # 判断图片已经下载
print('图片%s.jpg已下载!' % i) # 已下载就不再下载
else: # 没有下载才下载
pic = requests.get(picurl).content # 取得链接
rec = len(pic) # 取得图片的大小
if rec != 52: # 判断图片大小不是52字节,因为大小为52字节,说明图片有错
print('(≧^.^≦)喵~~~正在下载:' + picurl)
with open('图片\\%s.jpg'%i, 'wb') as f:# 图片没错就下载
f.write(pic)
else: # 图片有错就pass掉
pass
if __name__ == '__main__' : # 设置主函数
try:
os.mkdir('图片') # 创建一个目录,知道有人习惯在桌面打开,建个目录安全点
except:
pass
while i < 15000:
i += 1 # 让i在1-15000中遍历,猜测图片的ID,,本套图的ID最多是12000+
# 重头戏。设置多线程,我也是初学,还不太懂原理,见着比我用for循环,单个下载是要快得多
# 还在继续学习中,学海无涯,学无止境!!
# target用于调用先前创建的下载图片的函数,kwargs用于设置函数中的变量值
t1 = threading.Thread(target=get_pic, kwargs={'i' : i})
t1.start() # 启动多线程
EXE打包文件https://wwe.lanzouj.com/i1iN3fqki2b
反复运行程序,尽量下载完!!
|