您现在的位置是:首页 > 技术人生 > 后端技术后端技术

利用aria2操作接口实现torrent种子下载-java爬虫之selenium(三)

高晓波2020-10-13【后端技术】人已围观

简介最近写国外某下载站爬虫,该下载站是torrent种子下载站,全站一共一万多个种子文件,如果只爬取种子文件,再手动去一个个下载、手动去更新爬取任务状态,那将耗费大量的时间精力,写这个爬虫基本也失去了意义。

最近写国外某下载站爬虫,文章页很好办,虽然有各种加密,使用selenium就能轻松破解,selenium用法参考:selenium java操作页面常用方法示例-java爬虫之selenium(二)

该下载站是torrent种子下载站,全站一共一万多个种子文件,如果只爬取种子文件,再手动去一个个下载、手动去更新爬取任务状态,那将耗费大量的时间精力,写这个爬虫基本也失去了意义。

找到问题所在,问题就变得简单了,需要解决2个问题:
1、需要一个强大的torrent种子文件下载器,进行异步下载。
2、该下载器下载完成需要回调通知完成状态,好进行后续的操作以及统计。

此前我介绍过Centos7安装Aria2使用,Aria2支持种子文件、磁力链接,普通链接等多种下载,非常之强大。寻思着既然有Aria2有GUI静态页面,那么必然有对应的接口。果不其然,查阅相关资料后,了解到Aria2不仅支持websocket,还支持http接口,赞!

 


一、使用Aria2 Http接口下载torrent种子


本文仅以torrent种子下载为例,更多接口参考Aria2官网,有详细的文档。

接口地址
http://ip:port/jsonrpc

方法
POST

参数
{
	"jsonrpc": "2.0",
	"method": "aria2.addTorrent",
	"id": "QXJpYU5nXzE2MDI1NzA4ODdfMC41NTYxMzIxNzM4OTIxNDY1",
	"params": ["token:xxxxx", "torrent的base64值", [], {}]
}


返回值
{
	"id": "QXJpYU5nXzE2MDI1NzA4ODdfMC41NTYxMzIxNzM4OTIxNDY1",
	"jsonrpc": "2.0",
	"result": "79f433f6a7954ed5"
}


 说明
1、id:请求中的id和返回值中的id相对应,其实http接口这个id意义不大,主要是websocket中用于对应返回值和哪个请求相匹配
2、返回值result:相当于aria2中的下载任务id


 

二、设置Aria2下载完成回调

Aria2提供了下载完成后执行某脚本、命令的接口,只需要在aria2配置文件中添加如下配置即可:
#下载完成回调
on-download-complete=/usr/local/src/download-succedd-call-back.sh 


 其中download-succedd-call-back.sh 是我写的下载完成执行脚本。
 
#!/bin/sh
rm -f "$3.aria2"
mv "$3" /data/complete/
curl http://127.0.0.1:9092/complete?id="$1"


aria2执行脚本时会传入三个参数:
1、下载任务id,即上面添加torrent下载时返回的result字段,示例:79f433f6a7954ed5
2、文件个数,示例:1
3、文件名,示例:abc.mp4


我的download-succedd-call-back.sh脚本比较简单,主要实现3个功能:
1、删除aria2生成的.aria2文件
2、移动下载成功的文件至指定文件夹下
3、回调爬虫,通知某文件已下载完毕


 

Tags:aria2

很赞哦! ()

相关文章

文章评论