使用Python一键获取百度网盘提取码

描述
依托于百度网盘巨大的的云存储空间,绝大数人会习惯性的将一些资料什么的存储到上面,但是有的私密链接需要提取码,但是让每个想下载私密资源的人记住每一个提取码显然是不现实的。这个时候,云盘万能钥匙 诞生了,我们通过安装相应的浏览器插件就可以自动获获取相应链接的提取码。我在 Github 上看了一下,有 Web JS 版的, python 版的貌似还没有找到,所以我参照了JS 版本和官网的请求接口写了两种方式的获取脚本。

实现

下述两种方式的具体实现就不做代码解释了,思路都是一样,通过请求接口,拿到数据,然后返回即可

v1

import argparse
import re
import requests
import json
import time
'''
遇到python不懂的问题,可以加Python学习交流群:1004391443一起学习交流,群文件还有零基础入门的学习资料
'''
VERSION = "VERSION 1.0.0"


def checkUrl(url: str) -> str:
    m1 = re.match(
        "https?:\/\/pan\.baidu\.com\/s\/1([a-zA-Z0-9_\-]{5,22})", url)
    m2 = re.match(
        "https?:\/\/pan\.baidu\.com\/share\/init\?surl=([a-zA-Z0-9_\-]{5,22})", url)
    if not m1 and not m2:
        print("参数不合法")
        return False
    else:
        return True


def getKey(url: str) -> bool:
    if checkUrl(url):
        try:
            req = requests.get(f"https://node.pnote.net/public/pan?url={url}")
            code = req.status_code
            if code == 200:
                data = dict(json.loads(req.text))
                status = data.get("status", False)
                if status:
                    return data.get("access_code", "未能查询到该链接的提取码,可能原因是:该链接不需要提取码或已过期")
                else:
                    return data.get("messages", "为能查询到提取码")
            elif code == 404:
                return "不存在该链接的记录"
        except Exception as e:
            return f"请求服务器失败,错误代码:{code}"


def get_parser():
    parser = argparse.ArgumentParser()
    parser.description = "百度网盘提取码一键获取器"
    parser.add_argument('urls', metavar="urls", type=str, nargs="*",
                        help='设置要获取提取码的链接(多个链接请用空格分隔)')
    parser.add_argument('-v', '--version', action='store_true',
                        help='版本号')
    return parser


def command_line_runner():
    parser = get_parser()
    args = vars(parser.parse_args())
    if args['version']:
        print(VERSION)
        return

    s_time = time.time()
    if len(args['urls']) > 1:
        for item in args["urls"][1:]:
            print(f"{item}:\r\n\t{getKey(item)}")
        e_time = time.time()
        print(f"\n\n操作完毕,总耗时:{e_time-s_time} 秒")


def main():
    command_line_runner()


if __name__ == "__main__":
    main()

在这里插入图片描述

v2

-----------------------------------------------------
注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895 797 751
-----------------------------------------------------
'''
遇到python不懂的问题,可以加Python学习交流群:1004391443一起学习交流,群文件还有零基础入门的学习资料
'''
import argparse
import time
import re
import requests
from datetime import datetime
import json

accessKey = "4fxNbkKKJX2pAm3b8AEu2zT5d2MbqGbD"
clientVersion = "web-client"


def getPid(url: str) -> str:
    matches = re.match(
        "https?:\/\/pan\.baidu\.com\/s\/1([a-zA-Z0-9_\-]{5,22})", url)
    return matches[1] if matches else None


def getUuid(pid: str) -> str:
    return f"BDY-{pid}"


def getKey(url: str) -> str:
    pid = getPid(url)
    uuid = getUuid(pid)
    headers = {
        "type": "GET",
        "data": '',
        "dataType": "json"
    }
    url = f"http://ypsuperkey.meek.com.cn/api/items/{uuid}?access_key={accessKey}&client_version={clientVersion}&{datetime.utcnow()}"
    try:
        req = requests.get(url, headers=headers)
        code = req.status_code
        if code == 200:
            data = json.loads(req.text)
            accessCode = data.get("access_code", None)
            return "没找到提取密码,o(╥﹏╥)o" if (accessCode == "undefined" or accessCode == None or accessCode == "") else accessCode
        elif code == 400:
            return " 服务器不理解请求的语法"
        elif code == 404:
            return "不存在该链接的记录"
        else:
            return f"请求服务器失败,错误代码:{code}"
    except Exception as e:
        return e


def get_parser():
    parser = argparse.ArgumentParser()
    parser.description = "百度网盘提取码一键获取器"
    parser.add_argument('urls', metavar="urls", type=str, nargs="*",
                        help='设置要获取提取码的链接(多个链接请用空格分隔)')
    parser.add_argument('-v', '--version', action='store_true',
                        help='版本号')
    return parser


def command_line_runner():
    parser = get_parser()
    args = vars(parser.parse_args())
    if args['version']:
        print(VERSION)
        return

    s_time = time.time()
    if len(args['urls']) > 1:
        for item in args["urls"][1:]:
            print(f"{item}:\r\n\t{getKey(item)}")
        e_time = time.time()
        print(f"\n\n操作完毕,总耗时:{e_time-s_time} 秒")


def main():
    command_line_runner()


if __name__ == "__main__":
    main()

在这里插入图片描述

总结
v1 版本和 v2 版本是通过请求不同的接口方式来实现的, v2 接口的数据要相对更准确一些。具体可查阅具体的代码实现。

<think>好的,我需要帮助用户解决如何将文件从百度网盘迁移到夸克网盘的问题。根据用户提供的引用内容,有三个可能的解决方案:使用多网盘转存工具PHP源Python爬虫手动处理参数,或者使用第三方工具如元搜软件。 首先,我需要明确用户的需求。用户可能不具备编程背景,所以需要给出不同方法,适合不同技术水平的用户。然后,我需要结合提供的引用内容,确保信息准确,并正确引用来源。 第一步,检查引用中的工具。引用[1]提到PHP源的多网盘转存工具,支持百度转存到夸克等,无需下载。这可能适合有一定技术能力的用户,需要搭建PHP环境。但用户可能不知道如何操作,可能需要简要说明步骤,如下载源、配置参数等,并提示需要服务器环境。 引用[2]提到了使用Python爬虫处理参数如shareid、from、bdstoken等,通过抓包获取参数。这适合开发者或技术用户,需要编写代。但步骤较为复杂,用户可能需要更详细的指导,但考虑到用户可能不需要深入技术细节,可能需要简要说明这种方法的存在,并建议技术用户参考。 引用[3]介绍了元搜软件,支持夸克网盘批量转存和管理。这可能是最简便的方法,适合普通用户,但需要获取夸克的Cookie,可能存在安全风险,需提醒用户注意。 接下来,我需要将这些方法分步骤整理,结构清晰。可能分为三种方法:使用第三方工具、使用PHP源自建、使用Python脚本。每种方法需要列出步骤,注意事项,并标注引用来源。 还要考虑用户可能关心的问题,比如是否需要下载文件、安全性、是否需要付费等。例如,PHP源是否免费,元搜软件是否需要付费,Python脚本的复杂度等。 最后,生成相关问题,可能涉及工具选择、参数获取、安全注意事项等,帮助用户进一步探索。 需要确保回答符合系统指令:中文、正确LaTeX格式(虽然这个问题可能不需要数学公式,但需注意)、引用标注正确,没有使用Markdown,分点回答,相关问题放在最后。 现在,整理思路,结构化回答,确保每个步骤清晰,引用正确,语言自然。</think>### 如何将百度网盘文件迁移到夸克网盘? #### 方法一:使用多网盘转存工具(适合技术用户) 1. **下载PHP转存工具** 根据引用[1],源支持百度网盘资源一键转存到夸克、UC等网盘,无需下载文件。需自行搭建PHP环境并配置以下参数: - **后台设置**:添加开屏广告、转存密(可用于引流)。 - **关键参数**:从百度网盘分享链接中提取 `shareid`、`from`、`filelist` 等参数,手动抓包获取 `bdstoken`[^2]。 - **路径配置**:在代中指定夸克网盘的存储路径(需确保路径已存在)。 2. **注意事项** - 需熟悉服务器部署及PHP基础操作。 - 转存依赖网盘API的稳定性,部分接口可能失效。 #### 方法二:Python爬虫手动转存(适合开发者) 1. **参数获取与请求构造** - 通过浏览器开发者工具抓包,获取百度网盘分享页面的 `bdstoken`[^2]。 - 从分享链接解析 `shareid`、`from`、`filelist`,构造转存请求。 - 使用Python发送POST请求,将文件转存至夸克网盘指定路径。 2. **代示例(简化版)** ```python import requests def transfer_file(shareid, from_, bdstoken, filelist, path): url = "https://pan.baidu.com/api/sharedownload" params = { "shareid": shareid, "from": from_, "bdstoken": bdstoken, "filelist": filelist, "path": path } response = requests.post(url, data=params) return response.json() ``` #### 方法三:使用第三方管理工具(适合普通用户) 1. **元搜软件批量转存** 根据引用[3],元搜软件提供夸克网盘批量转存功能: - **Cookie登录**:通过浏览器获取夸克网盘Cookie并导入工具[^3]。 - **链接管理**:直接输入百度网盘分享链接,批量转存到夸克网盘。 - **资源整理**:支持对转存后的文件进行分类、分享链接生成。 2. **注意事项** - 需谨慎处理Cookie信息,避免账号泄露。 - 部分工具可能需要付费或存在使用限制。 #### 总结对比 | 方法 | 难度 | 是否需要下载文件 | 适用场景 | |------------|--------|------------------|------------------------| | PHP工具 | 高 | 否 | 自有服务器、定制化需求 | | Python脚本 | 中 | 否 | 开发者、自动化流程 | | 第三方工具 | 低 | 否 | 普通用户、快速操作 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值