求助啊,百度网盘分享资源的下载链接该如何获取?求助求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
napretep
V2EX    问与答

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

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

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

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

    你说的那些,我还得再研究研究,API、dlink、fs_id什么的我都不懂,还需要努力,有问题再来请教!
    PeterD
        13
    PeterD  
       2014 年 6 月 2 日
    @napretep "系统说我回复太过频繁" 是什么意思? 我没有遇到过,贴出错误信息看看.
    -------------
    关于api,你可以看看 https://baidupcs.readthedocs.org/en/latest/
    PeterD
        14
    PeterD  
       2014 年 6 月 2 日
    @napretep 对不起,发错了。https://baidupcs.readthedocs.org/en/latest/ 是要申请access_token的,并且只能对/apps目录操作。
    ----------
    看这个 http://baidupcsapi.readthedocs.org/zh_CN/latest/ ,它可以对所有网盘文件操作。
    napretep
        15
    napretep  
    OP
       2014 年 6 月 3 日
    @PeterD
    求教模块怎么装都装不来,错误提示:
    'module' object has no attribute 'SIGBUS'
    环境:
    Python 2.7.7 win7
    C:\Python27
    PeterD
        16
    PeterD  
       2014 年 6 月 3 日
    @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 年 6 月 3 日
    @PeterD 应该不是编码问题,错误提示是:
    AttributeError: 'module' object has no attribute 'SIGBUS'
    napretep
        18
    napretep  
    OP
       2014 年 6 月 3 日
    @PeterD
    我喜欢折腾,但是目前情况是不知道往哪折腾 = =
    napretep
        19
    napretep  
    OP
       2014 年 6 月 3 日
    @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 年 6 月 3 日
    @napretep python for windows 的signal模块不支持很多操作,其中就没有signal.SIGBUS

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

    windows上,不在babun中,pan.baidu.com.py是不能运行的。
    PeterD
        21
    PeterD  
       2014 年 6 月 3 日
    @napretep 你的模块继承也是错的
    给你个正确的 http://pan.baidu.com/s/1o6ySpiq
    napretep
        22
    napretep  
    OP
       2014 年 6 月 3 日
    @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 年 6 月 3 日
    @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 年 6 月 4 日
    @PeterD
    安装完了,肥肠不好意思= =
    又来麻烦你了
    这次的问题是乱码,我打开babun.bat打算输入help命令查询运行Python程序的方法,但是发现除了左边一侧的命令是英文的,右边一侧的解释全是乱码,根本看不懂,该如何解决呢?
    是不是编码不一致的问题?应该在哪里解决?
    还有问题就是如何运行你的Python程序?通过什么命令?
    napretep
        25
    napretep  
    OP
       2014 年 6 月 6 日
    @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 年 6 月 6 日
    @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 年 6 月 6 日
    @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 年 6 月 6 日
    napretep
        29
    napretep  
    OP
       2014 年 6 月 11 日
    @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 年 6 月 11 日
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4707 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 116ms UTC 01:48 PVG 09:48 LAX 17:48 JFK 20:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86