Python中如何下载磁力/电驴/迅雷的资源
刚接触 python 的菜鸟一枚,想写个爬虫批量下载电影,但是用下载图片的方法没办法下载电影了。 求指点~~~ 另外多线程的话应该怎么搞。。。
for movie in movies:
print(movie.title)
resource = urllib.request.urlopen(movie.downloadUrl)
movieData = open(movie.title, 'wb')
movieData.write(resource.read())
movieData.close()
Python中如何下载磁力/电驴/迅雷的资源
我觉得你后台跑个 aria2 把链接用 rpc 添加任务得了……
对于下载磁力/电驴/迅雷资源,Python有几个常用库可以处理。最推荐的是libtorrent,它功能强大且支持多种协议。
首先安装依赖:
pip install libtorrent
这里是一个完整的磁力链接下载示例:
import libtorrent as lt
import time
def download_magnet(magnet_link, save_path='./downloads'):
# 创建会话
ses = lt.session()
ses.listen_on(6881, 6891)
# 添加磁力链接
params = {
'save_path': save_path,
'storage_mode': lt.storage_mode_t.storage_mode_sparse
}
handle = lt.add_magnet_uri(ses, magnet_link, params)
print(f"开始下载: {handle.name()}")
# 等待元数据下载完成
while not handle.has_metadata():
time.sleep(1)
# 开始下载
handle.set_priority(lt.priority_t.highest)
# 监控下载进度
while handle.status().state != lt.torrent_status.seeding:
s = handle.status()
print(f'进度: {s.progress * 100:.2f}% | 速度: {s.download_rate / 1000:.1f} kB/s')
time.sleep(5)
print("下载完成!")
# 使用示例
magnet = "magnet:?xt=urn:btih:你的磁力链接哈希值"
download_magnet(magnet)
对于电驴链接,可以使用pylibed2k:
import pylibed2k
def download_ed2k(ed2k_link, save_path='./downloads'):
client = pylibed2k.Client()
client.connect()
# 添加下载任务
task = client.add_task(ed2k_link, save_path)
# 监控进度
while not task.is_complete():
print(f"进度: {task.progress * 100:.2f}%")
time.sleep(5)
client.disconnect()
迅雷链接需要先转换为普通链接,可以使用thunder库:
import base64
def thunder_to_url(thunder_link):
# 移除thunder://前缀并解码
encoded = thunder_link[10:] # 去掉"thunder://"
decoded = base64.b64decode(encoded).decode('utf-8')
# 移除AA和ZZ包裹
return decoded[2:-2]
# 使用示例
thunder = "thunder://QUFodHRwOi8vZXhhbXBsZS5jb20vZmlsZS56aXBaWg=="
real_url = thunder_to_url(thunder)
# 然后用requests或wget下载real_url
几个关键点:
libtorrent需要系统安装boost库- 电驴协议现在资源较少
- 迅雷链接本质是base64编码的普通URL
建议优先使用libtorrent处理磁力链接。
你这么个问法我觉得磁力和电驴你要自己写完实现是不大可能了。。直接调用其他下载工具吧
有多大硬盘存?那些爬虫站一般也就存个链接吧。
磁力链的话好办,直接调用 transmission (或者 arias)下载就可以了。
电驴,不知道,你可以看看 amule 什么的客户端有没有什么 API
迅雷,喵喵喵~~~
另外,多线程,一头雾水。
本来便是 p2p,没有固定的资源,不存在多不多线程的问题。
#5 搞错了,aria2 不支持 ed2k,ed2k 你得试试能不能用 amule 之类的
aria2 没弄过,我去找找,thx ~
#2,哈哈,这不是以为 python 是万能的。。。
#3 下一个网页里的电影就够了。。。SSD 太贵了。。。
#4 vely 详细,thx,我琢磨琢磨
#8 如果你愿意自己实现,任何一门语言都能接入任何一个 p2p 网络,反正 protocol 都是开放标准。
要不是大家提醒你差点写出个下载软件来
如果不是一些奇怪的视频,就用 you-get 下载吧
这种时候,你只需要遵循 KISS 原则就好了,有现成的东西当然就是拿来用咯
很多 sdk 的
BT 开源实现比较多,比如 libtorrent 库 http://www.libtorrent.org/python_binding.html
emule 只能用客服端了,emule/amule/MLDonkey.
迅雷死链的话只能用它家离线。
#11 我是很愿意,可惜没能力。。。
#12 尽管有点扎心,但是不会的才要学
vely sorry,让您失望了,sigh
我下载图片都是直接 os.system(‘aria2c xxx’) 是不是太弱了 
是 very。
而且没有 very sorry 的说法,只有 really sorry
迅雷有添加任务的 API
vely 可能是印度人的口音……
下载图片不如 wget -i
你是认真的?
You get it!
#24 python 可以用吗?没见官方给出 demo
#26 很强大。thx ~
还是调用第三方软件吧省心
可以把添加任务的 VBS 代码写入一个 .vbs 文件,然后用 Python 执行这个文件。
参考一下 Sonarr 的设计吧
非要 Python 的话,去看一下 Sick Beard
#35 thx,我试试
大佬能详细说下吗?试了 1 天没搞定。。。


