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

2014-06-02 09:14:23 +08:00
 napretep
我是个新手,因为语言学科研接触Python,半个月前想提高语料库容量,打算下载百度网盘所有的txt文档,可是半个月过去了,一直卡在网盘资源下载链接的抓取上…多方求助无果,在这里谢过各位了呀,能提供一些线索也好啊…我目前想了两条路子,一条是结合本地html源代码和headers的通信信息分析下载地址的一些规律,另一条比较麻烦我也没怎么做过就是使用js解释器运行js代码获得链接地址,好像很复杂,本人刚学python一个月,啥都不会,求各位大神帮忙啦(ToT)/~~~
11446 次点击
所在节点    问与答
30 条回复
yakiang
2014-06-02 11:01:12 +08:00
mortal
2014-06-02 11:28:49 +08:00
@yakiang 赞!
PeterD
2014-06-02 11:41:55 +08:00
inee
2014-06-02 12:30:28 +08:00
貌似之前的可以自定义转到自己网址的方法被封了
napretep
2014-06-02 12:35:52 +08:00
@PeterD
@yakiang
可以简单讲一讲下载链接提取的原理吗?
直接看代码有点困难
inee
2014-06-02 12:38:59 +08:00
@napretep php吧 模拟浏览器操作
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
2014-06-02 12:56:13 +08:00
@napretep <--> Peter Pan
napretep
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
2014-06-02 13:17:26 +08:00
@napretep 请求head有 但会经历两次跳转

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

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

你说的那些,我还得再研究研究,API、dlink、fs_id什么的我都不懂,还需要努力,有问题再来请教!
PeterD
2014-06-02 14:36:05 +08:00
@napretep "系统说我回复太过频繁" 是什么意思? 我没有遇到过,贴出错误信息看看.
-------------
关于api,你可以看看 https://baidupcs.readthedocs.org/en/latest/
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
2014-06-03 11:49:56 +08:00
@PeterD
求教模块怎么装都装不来,错误提示:
'module' object has no attribute 'SIGBUS'
环境:
Python 2.7.7 win7
C:\Python27
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
2014-06-03 12:55:19 +08:00
@PeterD 应该不是编码问题,错误提示是:
AttributeError: 'module' object has no attribute 'SIGBUS'
napretep
2014-06-03 13:05:45 +08:00
@PeterD
我喜欢折腾,但是目前情况是不知道往哪折腾 = =
napretep
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
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是不能运行的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/115355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX