V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
napretep
V2EX  ›  问与答

求助啊,百度网盘分享资源的下载链接该如何获取?求助求助

  •  
  •   napretep · 2014-06-02 09:14:23 +08:00 via iPad · 11274 次点击
    这是一个创建于 3625 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是个新手,因为语言学科研接触Python,半个月前想提高语料库容量,打算下载百度网盘所有的txt文档,可是半个月过去了,一直卡在网盘资源下载链接的抓取上…多方求助无果,在这里谢过各位了呀,能提供一些线索也好啊…我目前想了两条路子,一条是结合本地html源代码和headers的通信信息分析下载地址的一些规律,另一条比较麻烦我也没怎么做过就是使用js解释器运行js代码获得链接地址,好像很复杂,本人刚学python一个月,啥都不会,求各位大神帮忙啦(ToT)/~~~
    30 条回复    2014-06-11 21:42:37 +08:00
    yakiang
        1
    yakiang  
       2014-06-02 11:01:12 +08:00   ❤️ 2
    mortal
        2
    mortal  
       2014-06-02 11:28:49 +08:00
    @yakiang 赞!
    PeterD
        3
    PeterD  
       2014-06-02 11:41:55 +08:00   ❤️ 3
    inee
        4
    inee  
       2014-06-02 12:30:28 +08:00 via Android
    貌似之前的可以自定义转到自己网址的方法被封了
    napretep
        5
    napretep  
    OP
       2014-06-02 12:35:52 +08:00
    @PeterD
    @yakiang
    可以简单讲一讲下载链接提取的原理吗?
    直接看代码有点困难
    inee
        6
    inee  
       2014-06-02 12:38:59 +08:00 via Android
    @napretep php吧 模拟浏览器操作
    PeterD
        7
    PeterD  
       2014-06-02 12:52:41 +08:00
    @napretep 如果你只是要下载文件,只需要直接用pan.baidu.com.py就可。
    ---------------
    另外下载原理也简单:
    用pan.baidu.com的api
    1. 用api调取文件list,得到fs_id
    2. 计算sign -- 见def _get_dsign(self):
    3. 用api调取文件的dlink
    4. 下载请求的头中要有 Referer:http://pan.baidu.com/disk/home
    ---------------
    具体的看代码吧。
    PeterD
        8
    PeterD  
       2014-06-02 12:56:13 +08:00
    @napretep <--> Peter Pan
    napretep
        9
    napretep  
    OP
       2014-06-02 13:05:21 +08:00
    @inee 这个听起来太高端了、、、我目前会的操作性知识有:使用Python3的re模块的search、findall、split、compile,基本的Python语法,urllib.Request模块的URLopen、FancyURLopener.retrieve。
    背景知识有:HTTP协议的header部分,能阅读简单的html、js代码,编码转换知识,正则表达式。
    别的就不行了,同类型的知识可能可以百度自学,不同类型的可能就要跨越一下障碍了。。
    inee
        10
    inee  
       2014-06-02 13:17:26 +08:00 via Android
    @napretep 请求head有 但会经历两次跳转

    还有cookies时效检验 所以最好中转到自己服务器上
    yakiang
        11
    yakiang  
       2014-06-02 13:51:10 +08:00
    @napretep 你不就是要得到下载链接吗,构造请求后发送就能返回真实下载链接啦
    原理嘛我也没去看他的代码……
    napretep
        12
    napretep  
    OP
       2014-06-02 14:21:14 +08:00
    @PeterD
    系统说我回复太过频繁。。是不是可以通过清除COOKIES来避免这条警告。

    我名字结尾带pan,有女生说我像Peterpan,我就改了个Peterpan,但这个ID根本注册不到了好么,于是就变成了napretep。

    你说的那些,我还得再研究研究,API、dlink、fs_id什么的我都不懂,还需要努力,有问题再来请教!
    PeterD
        13
    PeterD  
       2014-06-02 14:36:05 +08:00
    @napretep "系统说我回复太过频繁" 是什么意思? 我没有遇到过,贴出错误信息看看.
    -------------
    关于api,你可以看看 https://baidupcs.readthedocs.org/en/latest/
    PeterD
        14
    PeterD  
       2014-06-02 14:43:43 +08:00
    @napretep 对不起,发错了。https://baidupcs.readthedocs.org/en/latest/ 是要申请access_token的,并且只能对/apps目录操作。
    ----------
    看这个 http://baidupcsapi.readthedocs.org/zh_CN/latest/ ,它可以对所有网盘文件操作。
    napretep
        15
    napretep  
    OP
       2014-06-03 11:49:56 +08:00
    @PeterD
    求教模块怎么装都装不来,错误提示:
    'module' object has no attribute 'SIGBUS'
    环境:
    Python 2.7.7 win7
    C:\Python27
    PeterD
        16
    PeterD  
       2014-06-03 12:21:56 +08:00
    @napretep windows的cmd.exe默认的是gbk编码,pan.baidu.com.py主要是为linux写的,用的是utf8编码作为输出,所以不能在cmd.exe下执行pan.baidu.com.py,不然会出错。

    你试试 https://github.com/babun/babun,安装后在%USER_HOME%\.babun中双击运行babun,在其中运行pan.baidu.com.py

    模块的话,
    https://github.com/kennethreitz/requests/archive/master.zip 中的 requests文件夹

    https://github.com/sigmavirus24/requests-toolbelt/archive/master.zip 中的 requests-toolbelt文件夹
    复制到pan.baidu.com.py的文件夹即可。

    再在babun中cd到pan.baidu.com.py的文件夹,运行其即可。如果你知道 alias, 则可将alias bp='python2 /path/to/pan.badiu.com.py'写入 ~/.oh-my-zsh/custom/example.zsh

    参考 https://github.com/PeterDing/iScript#pan.baidu.com.py 使用。

    -------------------
    如果你不想折腾,安装个百度网盘客户端更方便。
    napretep
        17
    napretep  
    OP
       2014-06-03 12:55:19 +08:00
    @PeterD 应该不是编码问题,错误提示是:
    AttributeError: 'module' object has no attribute 'SIGBUS'
    napretep
        18
    napretep  
    OP
       2014-06-03 13:05:45 +08:00
    @PeterD
    我喜欢折腾,但是目前情况是不知道往哪折腾 = =
    napretep
        19
    napretep  
    OP
       2014-06-03 13:26:09 +08:00
    @PeterD
    Traceback (most recent call last):
    File "C:\Python27\1\requests-toolbelt-master\iScript-master\pan.baidu.com.py", line 1358, in <module>
    main(argv)
    File "C:\Python27\1\requests-toolbelt-master\iScript-master\pan.baidu.com.py", line 1190, in main
    signal.signal(signal.SIGBUS, sighandler)
    AttributeError: 'module' object has no attribute 'SIGBUS'
    PeterD
        20
    PeterD  
       2014-06-03 13:38:13 +08:00
    @napretep python for windows 的signal模块不支持很多操作,其中就没有signal.SIGBUS

    我在win7上用babun中python就没问题,因为这个python是Cygwin中的。

    windows上,不在babun中,pan.baidu.com.py是不能运行的。
    PeterD
        21
    PeterD  
       2014-06-03 13:51:09 +08:00
    @napretep 你的模块继承也是错的
    给你个正确的 http://pan.baidu.com/s/1o6ySpiq
    napretep
        22
    napretep  
    OP
       2014-06-03 15:50:06 +08:00
    @PeterD
    babun的安装是不是这样:先下jvm,再下groovy,然后运行build.groovy?
    但是在运行Build.groovy时,遇到这样的错误:

    java.io.FileNotFoundException: \groovy\babun.version (系统找不到指定的路径。)

    at build.run(build.groovy:5)


    还有%USER_HOME%/.babun是什么路径?环境变量吗?
    PeterD
        23
    PeterD  
       2014-06-03 17:24:07 +08:00
    @napretep 不需要这样。

    babun 安装方法见 https://github.com/babun/babun#installation

    """
    Installation

    Just download the [dist file](http://projects.reficio.org/babun/babun-dist.zip), unzip it and run the install.bat script. After a few minutes babun starts automatically. The application will be installed to the %USER_HOME%\.babun directory.
    """
    -------

    1. 下载 http://projects.reficio.org/babun/babun-dist.zip
    2. 解压
    3. 运行 install.bat

    -------
    %USER_HOME%是你一打开cmd.exe所显示的路径
    napretep
        24
    napretep  
    OP
       2014-06-04 00:39:22 +08:00
    @PeterD
    安装完了,肥肠不好意思= =
    又来麻烦你了
    这次的问题是乱码,我打开babun.bat打算输入help命令查询运行Python程序的方法,但是发现除了左边一侧的命令是英文的,右边一侧的解释全是乱码,根本看不懂,该如何解决呢?
    是不是编码不一致的问题?应该在哪里解决?
    还有问题就是如何运行你的Python程序?通过什么命令?
    napretep
        25
    napretep  
    OP
       2014-06-06 16:33:55 +08:00
    @PeterD
    经过不断百度谷歌,已经能够通过这个shell运行Python程序了(其实还有部分关于babun本身的编码问题仍未解决)
    但是程序运行仍然报错,list元素溢出:
    Traceback (most recent call last):
    File "c:\babun-master\pan.baidu.com.py", line 1358, in <module>
    main(argv)
    File "c:\babun-master\pan.baidu.com.py", line 1235, in main
    comd = argv[1]
    IndexError: list index out of range
    napretep
        26
    napretep  
    OP
       2014-06-06 18:44:38 +08:00
    @PeterD
    OK
    现在的情况是这样:
    { ~ } » python c:\\babun-master\\pan.baidu.com.py "pan.baidu.com/s/1pJCx44z" ~ 1
    ['c:\\babun-master\\pan.baidu.com.py', 'pan.baidu.com/s/1pJCx44z']
    !! 命令错误

    这里参数传递有什么要求?
    PeterD
        27
    PeterD  
       2014-06-06 20:29:17 +08:00
    @napretep
    babun 是一个基于Cygwin的,让在windows上也可以使用linux shell.
    help 是cmd.exe中的命令,用gbk编码,所以在以utf8编码的babun下自然是编码错误。你想知道的不是babun这么用的问题,而是linux shell是什么。 -- 关于linux的基础,推荐你看看 http://www.ppurl.com/2010/09/%E9%B8%9F%E5%93%A5%E7%9A%84linux%E7%A7%81%E6%88%BF%E8%8F%9C-%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AF%87%E7%AC%AC%E4%B8%89%E7%89%88.html (注册后,可下载)

    python的基本知识推荐你看看:
    中文: http://www.pythondoc.com/pythontutorial27/
    en: https://docs.python.org/2/tutorial/

    pan.baidu.com.py 的用法 https://github.com/PeterDing/iScript#pan.baidu.com.py 写得很清楚。
    如,你想运行的
    下载:
    python c:\\babun-master\\pan.baidu.com.py download "pan.baidu.com/s/1pJCx44z"

    python c:\\babun-master\\pan.baidu.com.py d "pan.baidu.com/s/1pJCx44z"
    转存:
    python c:\\babun-master\\pan.baidu.com.py save "pan.baidu.com/s/1pJCx44z" "/存到这
    里"

    python c:\\babun-master\\pan.baidu.com.py s "pan.baidu.com/s/1pJCx44z" "/存到这
    里"

    这里 c:\\babun-master\\pan.baidu.com.py 也可以写成 /cygdrive/c/babun-master/pan.baidu.com.py
    ----------------
    注意:
    运行前pan.baidu.com.py中的username和password是要手动填入的。
    PeterD
        28
    PeterD  
       2014-06-06 20:31:15 +08:00
    napretep
        29
    napretep  
    OP
       2014-06-11 16:05:16 +08:00
    @PeterD
    python c:\\down\\pan.baidu.com.py d 'http://pan.baidu.com/share/link?shareid=540994448&uk=943277605'
    Traceback (most recent call last):
    File "c:\down\pan.baidu.com.py", line 1358, in <module>
    main(argv)
    File "c:\down\pan.baidu.com.py", line 1268, in main
    x.do()
    File "c:\down\pan.baidu.com.py", line 1178, in do
    self.get_params()
    File "c:\down\pan.baidu.com.py", line 1114, in get_params
    "bdstoken": p.group(2),
    AttributeError: 'NoneType' object has no attribute 'group'


    最近在做一个将必应搜索百度网盘结果做成list的小程序和你的程序接合,今天完工,准备接一下你的程序时,发现又有问题,求解决。
    PeterD
        30
    PeterD  
       2014-06-11 21:42:37 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2422 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 128ms · UTC 04:02 · PVG 12:02 · LAX 21:02 · JFK 00:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.