吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1743|回复: 5
收起左侧

[讨论] 小白写的python多线程图片下载,存文件不会用相对路劲

[复制链接]
fanvalen 发表于 2020-5-1 19:13
[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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Zeaf 发表于 2020-5-1 19:35
不加那些前缀就是默认同目录下?
assdqwe123 发表于 2020-5-1 19:38
本帖最后由 assdqwe123 于 2020-5-1 19:42 编辑

相对路径就是 相对程序工作目录的路径
比如:程序工作路径是C:\Users\Sen\Desktop,相对路径为image\first
    等价于绝对路径C:\Users\Sen\Desktop\image\first
简单来说
路径设置为"img",就相当于在你程序运行目录下的img文件夹
Takitooru 发表于 2020-5-1 19:40
'.\'表示当前路径

[Python] 纯文本查看 复制代码
with open(r'.\img\111.jpg','w',encoding='utf-8') as f:
    f.write('abc')


动态绝对路径

[Python] 纯文本查看 复制代码
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')
知意执意 发表于 2020-5-2 08:17
直接  file =  name + ".jpg" 就行
ymhld 发表于 2020-5-2 15:47
本帖最后由 ymhld 于 2020-5-2 15:49 编辑

import os

print(os.getcwd())

print(os.path.join(os.getcwd(),"this"))


用上面的获取,用下面的进行连接
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 17:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表