一、解析原理
百度网盘解析,顾名思义就是将百度网盘中所存储的文件解析出来。一般来说,每个文件都有一个唯一的链接。通过这个链接,我们就可以在网上下载该文件。而百度网盘解析就是通过分析这个链接的特征,从而获取该文件的真实下载地址。具体来说,那就是通过 HTTP 协议来读取链接内容,解析出其所包含的真实下载地址,然后把这个地址反馈给用户。
为了加强使用体验,百度网盘解析服务一般会提供大量的服务器资源以进行并发下载,从而提高下载速度。
二、解析工具
市面上有很多百度网盘解析工具,这里我们推荐几个:
1. PanDownload
PanDownload是一个非官方的百度网盘下载工具,它可以让我们轻松地下载整个文件夹,或选择性下载单个文件,而且不需要进行解析,因为它已经对百度网盘文件进行了解密。
def pan_download(url):
pan_url = 'https://pandownload.com/api/v2/version'
response = requests.get(pan_url)
version = response.json()['version']
api_url = f'https://pandownload.com/api/v2/static/python/{version}/pan.pyz'
subprocess.run([sys.executable, "-c", f"import requests; requests.get('{api_url}').content"], stdout=subprocess.PIPE)
cmd = ['python', 'pan.pyz', url]
p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
return p.stdout.decode(errors='ignore'), p.stderr.decode(errors='ignore')
2. LanZouCloud
LanZouCloud 是一家国内外免费的云盘网站,可以说是百度网盘的替代。在此平台上上传文件,其支持外链分享可以使用外部下载工具全速下载,并且不会受到百度网盘的下载限制流量限制。
import requests
def lanzou_download(url, pwd=None):
response = requests.get(url)
if response.status_code == 404:
return '文件不存在'
file_name_start_pos = response.text.find('filename=') + 10
file_name_end_pos = response.text.find('rn', file_name_start_pos)
file_name = response.text[file_name_start_pos:file_name_end_pos]
if pwd is not None:
pwd_start_pos = response.text.find('var pwd =') + 10
pwd_end_pos = response.text.find(';', pwd_start_pos)
post_url = 'https://www.lanzoudao.com/ajaxm.php'
post_data = {
'action': 'downprocess',
'sign': '',
'ves': '',
'pwd': pwd
}
pwd_str = response.text[pwd_start_pos:pwd_end_pos].replace("'", '').replace('+', '')
last_str = ''
for i in range(0, len(pwd_str), 2):
last_str += chr(int(pwd_str[i:i+2], 16))
sign_start_pos = response.text.find('var sign =') + 10
sign_end_pos = response.text.find(';', sign_start_pos)
sign_raw = response.text[sign_start_pos:sign_end_pos].replace("'", '').replace('+', '')
sign = ''
for i in range(0, len(sign_raw), 2):
sign += chr(int(sign_raw[i:i+2], 16))
post_data['sign'] = sign
post_data['ves'] = last_str
post_data['url'] = url
response = requests.post(post_url, data=post_data, allow_redirects=False)
response = requests.get(response.headers['location'], stream=True)
else:
response = requests.get(url, stream=True)
if 'Content-Length' in response.headers:
file_size = int(response.headers['Content-Length'])
else:
file_size = 0
for chunk in response.iter_content(chunk_size=1024):
file_size += len(chunk)
with open(file_name, 'wb') as f:
total_size = 0
if file_size != 0:
print(f'{file_name} 总大小:{format_size(file_size)}')
for chunk in response.iter_content(chunk_size=1024):
if chunk:
total_size += len(chunk)
f.write(chunk)
if file_size != 0:
percent = total_size/file_size*100
print(f'{file_name} 已完成:{format_size(total_size)}/{format_size(file_size)}——{percent:.2f}%')
f.flush()
return f'{file_name} 下载完成'
三、解析平台
其实不仅仅是工具,现在市面上还出现了一些解析平台。这些平台提供一种网盘在线解析服务,用户可以将文件链接提交到平台上,平台自动解析出下载地址,不需要用户下载任何软件。这里我们也推荐几个:
1. 7YS.net
7YS.net 是一个稳定的百度网盘解析平台,提供稳定快速的百度网盘解析服务。用户可以在网页上输入百度网盘分享链接,点击“解析”按钮,在解析成功后获得百度网盘下载直接链接。
def sevendays(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'
}
res = requests.get(url, headers=headers)
if res.status_code == 404:
return '文件不存在'
try:
link = re.findall(r'(http[s]?://[w./?-]+)', res.text)[0]
if 'pan.baidu.com' in link:
subres = requests.get(link, headers=headers, allow_redirects=False)
if 'Location' in subres.headers:
return subres.headers['Location']
except:
pass
return '解析失败'
2. yun.lolita.mobi
yun.lolita.mobi 是另一个非常好用的百度网盘解析平台,提供更为稳定便捷的网盘解析服务,输入您需要下载的链接即可迅速获取下载地址。
def yun_lolita_mobi(url):
api_url = 'https://yun.lolita.mobi/bd.php?txt=' + url
result = requests.get(api_url).text
if '失败' in result:
return '解析失败'
return result
四、解析限制
不过需要注意的是,由于版权和安全等方面的原因,百度网盘在文件的下载链接上做了对应的限制,因此,在进行百度网盘下载解析时,需要注意以下这些限制条件:
1. IP 限制
下载链接会有一个IP验证,即一个链接只能被一个 IP 访问一定次数;当超过次数之后,该链接就不再可用。解决这种情况的方法就是:更换链接 IP。
2. 需要验证码
下载时需要输入验证码的原因可能是我们下载速度过快,百度网盘为了防止API被滥用,所以设置了人机验证码。几乎所有自动解析工具都会通过验证码的方式进行验证。当操作太频繁就会出现NeedVerifyException异常,需要手动完成验证,手动验证之后系统会把Cookie存在本地,之后可以直接读取Cookie,完成自动化验证。
3. 百度盘链接失效
由于种种原因,如分享链接过期或者分享者主动撤销分享等,百度网盘的下载链接往往会失效,导致下载失败。这时,我们可以通过重新获取链接或者寻找其他网盘平台等方式解决该问题。
4. 分享链接提取码限制
很多共享文件采用密匙加密等方式限制了访问权限,只有知道提取码的用户才能访问该文件。解决这个问题最简单的方法就是手动提交分享链接和提取码。如果你关心数据安全,可以选择使用安全加密方法对链接和提取码进行加密保护。
5. 文件大小限制
百度网盘对于文件的大小有一定的限制,对于大于 2GB 的文件,一般需要进行多段下载。这种情况下,工具会先分析文件的打包情况,并自动切割成多个小文件进行下载,随后再解压合并成大文件。
五、总结
百度网盘解析是一种十分实用的服务,它可以帮助我们更快地获取一些网络上的资源。当然,也随之而来一些限制。但是通过一些工具和平台,我们可以更加便捷和高效地完成这项工作。
