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

'.\'表示当前路径
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')

知意执意 发表于 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"))


用上面的获取,用下面的进行连接
页: [1]
查看完整版本: 小白写的python多线程图片下载,存文件不会用相对路劲