zoukankan      html  css  js  c++  java
  • python实现的百度云自动下载

    2021-5-21
    注意:这个功能目前不能用了,不知道为什么
    运行代码后提示:
    [10:02:50] Waiting 10 seconds before retrying...
    [10:03:00] Request Try #2 / 5
    [10:03:00] Waiting 20 seconds before retrying...
    [10:03:20] Request Try #3 / 5
    [10:03:20] Waiting 30 seconds before retrying...
    然后就没然后了,谁找到突破方法,记得告诉我啊

    python实现简单的百度云自动下载

    bypy

    https://github.com/houtianze/bypy
    这是一个百度云/百度网盘的Python客户端。主要的目的就是在Linux环境下(Windows下应该也可用,但没有仔细测试过)通过命令行来使用百度云盘的2TB的巨大空间。比如,你可以用在Raspberry Pi树莓派上。它提供文件列表、下载、上传、比较、向上同步、向下同步,等操作。
    常用操作
    由于百度PCS API权限限制,程序只能存取百度云端/apps/bypy目录下面的文件和目录。通过以下链接可以打开你的bypy默认路径:
    https://pan.baidu.com/disk/home#list/vmode=list&path=%2Fapps%2Fbypy

    pip install bypy
    
    app授权

    第一次运行时,运行下面的代码后,会提示进入以下目录对app进行授权:

    from bypy import ByPy
    bp=ByPy()
    bp.list() 
    

    https://openapi.baidu.com/oauth/2.0/authorize?client_id=q8WE4EpCsau1oS0MplgMKNBn&response_type=code&redirect_uri=oob&scope=basic+netdisk


    Paste the Authorization Code here within 10 minutes.
    Press [Enter] when you are done

    看到这张图,就是已经授权好了,然后你就可以打开我的百度网盘,在这里看到:

    查看目标目录bypy下的文件和目录

    由于百度PCS API权限限制,程序只能存取百度云端/apps/bypy目录下面的文件和目录
    如果你COPY一些文件和目录到bypy下,从app角度来看目标目录,一般是这样:

    from bypy import ByPy
    bp=ByPy()
    bp.list() 
    

    授权后运行,得到下面的结果:

    bypy的命令

    在命令行方式下:

    bypy list #查看云盘目录bypy下的文件和目录 
    bypy info #查看 System locale 和 磁盘空间使用情况,以及bypy作者的一些信息
    bypy upload  # 把本地当前目录下的文件上传到app/bypy目录下
    bypy downdir /Python从入门到入狱  #下载
    bypy help #更详细的了解某一个命令:
    bypy syncup #把当前目录同步到云盘,或用bypy upload
    bypy syncdown #把云盘内容同步到本地来,或 bypy downdir /
    #实践可用 bypy syncdown --downloader aria2或者bypy downdir / --downloader aria2
    #bypy syncdown 这个命令不好用,要在后面加 –downloader aria2,要不没有速度
    
    bypy compare  #比较本地当前目录和云盘(程序的)根目录(这个很有用)
    bypy downfile 下载文件名 #下载文件 
    
    bypy upload 文件名 #上传文件
    #例:将本地C:Mytemp1.txt文件上传到云盘我的应用程序(apps) /bypy/cloud 文件夹内 (注意云端文件夹 用"/" ,本地文件夹用"")也可上传整个文件夹,命令示例如下:
    bypy upload C:Mytemp /cloud    #(将本地C:Mytemp文件夹内所有文件上传到云盘 apps/bypy/cloud 文件夹内)
    
    bypy mkdir tmp/bypy #在远端创建文件夹tmp 
    
    

    其它:

    运行时添加 -d ,会显示一些调试信息。
    运行时添加 -ddd ,还会会显示HTTP通讯信息( 警告:非常多 )
    运行时添加 -v 参数,会显示进度详情。例如:使用命令:bypy -v upload localfile cloudfile
    举例:bypy -v upload C:Mytemp  /cloud

    其它功能:

    import os
    import platform
     
    from bypy import ByPy
     
     
    class Adapter:
        """
        bypy 适配器
        前提运行 bypy info 登陆成功
        """
        def __init__(self):
            self._bp = ByPy()
     
        def upload(self,localpath,remotepath,**kwargs):
            """
            上传
            :param localpath:
            :param remotepath: /videos  实际路径/bypy/videos
            :param kwargs:
            :return:
            """
            self._bp.upload(localpath=localpath,remotepath=remotepath,**kwargs)
     
        def delete_file(self,path):
            platf = platform.platform()
            if "Windows" in platf:
                os.system("del %s" % path)
            elif "Linux" in platf:
                os.system("rm -rf %s" % path)
            print("!-- delete success %s --!"%path)
    

    其它方式:

    #coding=utf-8
    '''
    自动填写提取码下载百度云资源
    方法:
    for
      读取文件中的连接和提取码
    1 打开网页(link)
    2 输入提取码
    3 下载
    '''
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    driver = webdriver.Chrome()
    f = open("baidulink.txt",encoding="utf-8")  
    l = open("log.txt","w")             
    lines = f.readlines()                
    for line in lines: 
        
        if line != '
    ':
            if len(line) > 10:
                print (line)  
                list = line.split(" ")
                print (list)
                link = list[2]
                link = link.split(":")[1]
                link = link.strip()
                print (link)
                num = list[3].split(":")[1]
                num = num.strip()
                print (num)
                driver.get(link)
                elem = driver.find_element_by_id("eoX9ze") 
                elem.send_keys(num)
                elem.send_keys(Keys.RETURN)
                time.sleep(1)
                sreach_window = driver.current_window_handle  
                driver.find_element_by_xpath("//*[@id='layoutMain']/div[1]/div[1]/div/div[2]/div/div/div[2]/a[2]").click()
                '''
                写日志,便于检查下载丢失的文件
                '''
                l.writelines(line)
                l.write('
    ')
        line = f.readline() 
        time.sleep(3)
    f.close() 
    
    

    把连接存在 baidulink.txt中,文件是逐行读取,提取出连接和提取码
    使用selenium模拟浏览器,必须保证你的浏览器是Google Chrome,并装了chromedriver,相关内容自行百度

    注意一下几点:
    1 elem = driver.find_element_by_id("eoX9ze")
    这个id好是会变的,如果变了按F12查看

    2 sreach_window = driver.current_window_handle
    页面跳转后,需要把driver定位到当前页面

    3 driver.find_element_by_xpath("//*[@id='layoutMain']/div[1]/div[1]/div/div[2]/div/div/div[2]/a[2]").click()
    这里使用xpath(还有id name selector等,选择适合的),可以使用选择那段代码然后复制xpath
    以上功能十分简单,能够节省很多时间。如果频繁下载,会遇到输入验证码的时候,我选择等待,还有其他方法(可以使用代理等)

    插件

    众多插件

    https://github.com/search?l=Python&q=baidu+pan&type=Repositories&utf8=✓

    参考资料

    https://ezlost.com/bypy使用方法记录/
    https://blog.csdn.net/xia_yu_mao_fa/article/details/37772847
    推荐:https://samzong.me/2017/06/02/howto-install-bypy/

  • 相关阅读:
    python import模块的搜索路径
    【转载】PDB命令行调试Python代码
    python 操作hdfs
    hadoop基本命令
    配置hadoop集群
    hadoop配置
    pycharm 配置spark
    pip 使用镜像下载第三方包
    pyechart.Geo -- 基于中国地图数据显示
    cv2 读取图片及展示
  • 原文地址:https://www.cnblogs.com/treasury-manager/p/14675277.html
Copyright © 2011-2022 走看看