小白写的python多线程图片下载,存文件不会用相对路劲
# -*- coding: utf-8 -*-import requests
import time
import os
import threading#多线程模块
def _downimg(page):
header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
strp = str(page)
site = 'g:\\img\\' + strp + '\\'# 合成路劲
if not os.path.exists(site):#判断一下文件夹是否存在,存在跳过不存在创建
os.makedirs(site)
#下载页面
'''#print(site)
url = "" + strp
r = requests.get(url, headers=header,timeout=30)
#print(r.url)
#print(r.text)
#if r.status_code == 200:
#htm = str(r.text)
with open(site,"w",encoding='utf-8')as f:
f.write(str(r.text))
f.close()'''
#下载图片
p = 1
while p < 21:
name=str(p)
url2 = "https://img.cache010.com/media/videos/tmb/"+ strp +'/'+name+".jpg"
file = "g:\\img\\" + strp + "\\" + name + ".jpg"
try:
if not os.path.exists(file):#判断文件是否存在,存在跳过,不存在就下载
img = requests.get(url2, headers=header,timeout=60,stream=True)#.content
if img.status_code==200:
if len(img)<200:#判断一下图片大小是否合适,太小就是空跳过。
with open (file,'wb')as f:
f.write(img.content)
f.close()
print("已下载"+name+"张图")
p=p+1
else:
print("图片无法显示丢弃")
p=p+1
else:
print("无法访问,跳到下一页")
break
else:
print("文件已存在,再判断一下大小是否符合")
size=os.path.getsize(file)
if size<200:
os.remove(file)
print("删除不匹配的文件")
p=p+1
else:
p=p+1
print("文件正常")
except BaseException:
pass
print("重新下载")
page= page + 1
print("已下载" + strp)
print("下载完成")
#多线程调用downing
page=1
while page<50:
try:
for i in range(10):
thd1=threading.Thread(target=_downimg,args=(page,))
page=page+1
thd1.start()
for i in range(10):
thd1.join()
except BaseException:
pass
经过上次用urllib来下载这次改进用req
RT 小白只会用熟悉的模块来实现功能,
有个问题就是 储存的路劲怎么设置成 程序当前目录下而不是绝对路劲
欢迎大佬点评
另外下载的图片有需要的自取
链接:https://pan.baidu.com/s/1_ZmPW4qHo0YBnyMiE_sGJg
提取码:78t7
不加那些前缀就是默认同目录下? 本帖最后由 assdqwe123 于 2020-5-1 19:42 编辑
相对路径就是 相对程序工作目录的路径
比如:程序工作路径是C:\Users\Sen\Desktop,相对路径为image\first
等价于绝对路径C:\Users\Sen\Desktop\image\first
简单来说
路径设置为"img",就相当于在你程序运行目录下的img文件夹 '.\'表示当前路径
with open(r'.\img\111.jpg','w',encoding='utf-8') as f:
f.write('abc')
动态绝对路径
import os,sys
project_path = os.path.dirname(os.path.abspath(__file__)) # 获取当前文件路径的上一级目录
file_path = project_path+r'\img\111.jpg' # 拼接路径字符串
with open(file_path,'w',encoding='utf-8') as f:
f.write('abc') 直接file =name + ".jpg" 就行 本帖最后由 ymhld 于 2020-5-2 15:49 编辑
import os
print(os.getcwd())
print(os.path.join(os.getcwd(),"this"))
用上面的获取,用下面的进行连接
页:
[1]