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/

  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/treasury-manager/p/14675277.html
Copyright © 2011-2022 走看看