2021-5-21
注意:這個功能目前不能用了,不知道為什么
運行代碼后提示:
然后就沒然后了,誰找到突破方法,記得告訴我啊
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()
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:\Mytemp\1.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 != '\n':
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('\n')
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/