首页 > 黑暗科技研究 > 动画下载URL获取器

动画下载URL获取器

2014年3月22日 发表评论 阅读评论

唉,语文老师死得早的人写篇博客,起个题目也就这个水平了。。。

总而言之,四月春番要来了,所以按照我个人的自然习惯,就到了“收割”一月冬番和去年十月番的时候到了,翻译过来就是,下载下来放到最近刚买的2T硬盘中,等待布教的时机的到达。。。(自从用了上次自己写的小工具,收割速度Maximize啊!!)

但是又因为不想做老板交代的某件非常“羞耻Play”的任务,于是这一周趁闲着的时机,在之前的《爬取Zero动漫下载链接的几种方法》的基础上(其实是完全重写了),做了一个只要输入动画名字(部分即可)和所要的集数即可直接获取到URL的小工具。【其实只是我懒得每次下动画都要去打开Zero动漫,然后搜索动画,获得所在的URL而已。。】

食用准备

1.首先。。。你需要有个Python环境。。。额,没有我也没办法。。暂时懒得做C++ MFC版本。。。其实很容易实现,基本没有技术难点。。看有没有人愿意做出来造福社会么。。或者等我再次闲的蛋疼。。。

2.去github下载源文件。【右边Download ZIP字样处】,哦,顺便一提,跟本文有关的其实只是那个Zerodm_PY的文件夹下的东西!你大可下载后把其余的都删掉,因为那些是上次那篇博文的代码。。我懒得把它们分开。。

已增加python 3.x以上使用版本,食用请选择Zerodm_PY-3.X文件夹下的东西。。。不过Python3.x这个版本由于修改得比较随心。。所以。。。

亦或者下载这个链接:githubfavicon
不过呢,由于我懒,以后如果改了版本什么的,都是往github上面扔的。。。。除非有重大bug,不然这个链接的文件一直是第一版。。

食用方法

1.首先,你需要cmd模式下cd到那个Zerodm_PY目录下。

2.比如你要下载《中二病也要谈恋爱》,那么运行下面命令:

python zerodm.py 中二病也要谈恋爱

但是事实上,有时候由于中文名翻译问题,你输入完整名字是匹配不到的,就好像你不知道应该输入《来自风宁静的明日》还是《来自风平浪静的明天》【这部好看么?】,所以你可以只输入一部分。比如:

python zerodm.py 中二病

那么就会显示如下界面:
zerodm1

然后你所需要做的就是输入你想要下载的那个前面的序号即可!比如1。。。。

点击展开补充说明

3.然后界面就会变成如下状态:
zerodm2

这个时候会在网上获取到现在可以下载到的剧集的信息,你再输入你要下载得集数,这里提供三种输入模式:

  • 只下载某一集,那么输入集数即可,比如7
  • 下载指定范围集数,比如输入2-5
  • 下载全部,输入all

请务必注意,你所输入的序号不应该完全参照集数,而应该是上图中每一集前面那个中括号里面的数字!!因为经常会有如下状况发生:
zerodm5

这种时候你想下载6-8话的话,那么你应该输入的是8-10

4.输入完集数基本就算完事儿了,等它慢慢获取玩下载URL就可以了。嗯,为什么要说“慢慢”呢?因为,再次强调,不设时间间隔的爬虫都是耍流氓。。【好吧,其实是下太快会出现下载失败的状况。。没错,就是验证码。。】
zerodm6

额,然后就是把该目录下动画名命名的txt文档里面的东西直接拷到“迅雷-新建”里面就可以了。

额,这种方法获得的下载链接还是那句话,请尽快使用,因为变质很快。。保质期只有十分钟左右。。

获取失败的情况

因为其实这个原理完全还是之前那篇Zero动漫博文里面的方法,所以如果过量下载的话,还是会因为迅雷排除验证码姬来干扰而导致获取不到URL的。
zerodm6

一般遇到的验证码姬有两种情况:

一种是无组织无纪律类型的,她们的特征是,她会让你中间某集下不了,其他的剧集却还是可以照样下,出现原因条件不明。。这种情况下,你会在下载生成的txt文件最后找到那些下载失败的个别剧集(一般就一集),然后后面附带对应的URL(下图最下面那个xunlei的地址),你粘贴到浏览器然后输一下验证码,然后就可以下载了。当然,一般只有一集的话,你输完验证码直接在浏览器右键“使用迅雷下载”就可以了。。。没必要再用这个工具。。
zerodm7

另一种就是有组织有纪律的群体罢工行为,比如下图:
zerodm8

这种一般是迅雷娘嫌你访问太多次,暴怒了,不过也好对付,Again,还是在生成的txt最下面找到下载失败的那些剧集,然后随便找一个URL贴到浏览器里面,输入完验证码,再用这个小工具重新下载一边那些失败的部分即可。因为都是连续的剧集,所以输入要下载的剧集的时候输入个范围就可以了。

以上,就是下载的整个使用方法了。

数据库更新

妈蛋,说是个数据库,其实就是个文本文件嘛魂淡!

实现的基本原理你看看代码的话,大概就知道,我事先用暴力爬虫的方法把Zero动漫上面现有的动画和它的编号下载下来存在一个database.dat里面,你右键记事本查看就知道了。然后把一些失效的页面id存在了invalid.dat,为了让工具可以正常运作,请务必包含这两个文件。然后就是在本地这些“数据库”里面匹配,找到动画所在页面URL,再去在线爬取当前剧集信息。

然后这就出现了一个问题了,比如说,四月新番过阵子出来后,因为本地数据库没有这些剧集的信息,所以是下不到的。所以我就加了个小模块,你只要运行(中括号内容不是必须包含的):

python database.py -u[pdate]

然后等待一下,就可以把数据库更新的和Zero动漫同步了。。。【还是觉得把一个文本文件叫做数据库很别扭。。

一些完全没有价值的信息


唉,这个小工具所有文件加起来300行,而事实上真正要实现那些核心功能的,只要150行左右就可以了。。。但是由于我强迫症发作,为了防止程序崩溃,附加了各种提示性语句,各种情况下的有效输入检测,抓取网页那几行都加了try-except等等。。。然后代码就。。。越。。。。来。。。。越。。。长。。。

唉,算了,就这样吧,最近还想去玩一下天猫的那个大数据比赛呢。。。诶?你说啥?我忘了做老板交代的任务?那是啥?可以吃么?


更新说明:

3月
22

居然发现我用来测试的电脑被强制403了。。。只好加个header。。


【完】

本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com

  • 这脚本非常好,强烈推荐让它与 You-Get 合体,实现真・自动化下载!

    • 刚刚看了一下Y-G,好像和现在这个要合体还是有点难点,因为YG好像不支持迅雷?如果要用的话好像还是要找Zero动漫以外的地方作为支持。不过YG好像支持百度网盘,Zero上有这个的资源,就是不知道好不好使。。有空研究一下。。

  • 话说 zerodm现在 貌似 挂了。

  • OX

    再加上我自己的新番API 写个script自动下载……挂到路由器上 直接下到HTPC上.不能再机智

    • OX

      PS C:UsersOXDesktop_tmpzerodm-download-masterZerodm_PY> python zerodm.py 中二病也 File "zerodm.py", line 30 print name," Not Found!!"; ^SyntaxError: invalid syntax貌似有点BUG

      • 我用没问题啊!输入“ python zerodm.py 中二病也”可以找到动画啊,而且强行进入第30行,也不会报“SyntaxError: invalid syntax”这个错啊。。是不是编码的问题?

      • 你的python该不会是3.0吧。。

    • API那个很不错诶,有空去“合体”一下~

  • 你又做这种造福人类的工作了

    • 主要造福我自己。。

  • nice work _____________________________

    • ggicci@ubuntu:~/github/zerodm-download/Zerodm_PY$ python zerodm.py 绝园绝园 Not Found!!ggicci@ubuntu:~/github/zerodm-download/Zerodm_PY$ python zerodm.py 中二病中二病 Not Found!!ggicci@ubuntu:~/github/zerodm-download/Zerodm_PY$ python zerodm.py 黑子黑子 Not Found!!ggicci@ubuntu:~/github/zerodm-download/Zerodm_PY$ python zerodm.py 进击进击 Not Found!!ggicci@ubuntu:~/github/zerodm-download/Zerodm_PY$ python zerodm.py 进击的巨人进击的巨人 Not Found!!--------------------- * * * ---------------------what the fuck !!!

      • 所以你们用的是python 3么?

        • Nope~ absolutely 2.7 ___________________

          • 那奇怪了。。。我也是2.7啊。。会不会有可能是linux和windows下文本文件最后换行符导致的问题。。。你看一下database.dat那个文件换行符对不?我感觉数据索引没读回来。。你测一下main里面GetAnimateList()返回来是不是为空?

            • 帮你把 BUG 改了:database.py 第 47 行 - title = GetAnimateTitle(id);+ title = GetAnimateTitle(id).decode('GBK').encode('UTF-8')是编码的问题,统一一下用 UTF-8,看了以下 zerodm,用的是 GB2312 编码,所以我用 GBK 给它转码就行了,不过重建数据库好慢的样子。

              • 嗯,重建数据库是非常慢的过程。。为什么需要重建呢?

                • 不重建也行,把原来的数据文件用 UTF-8 重新编码了就能用了,我只是看看是不是数据库出问题了,因为我 VIM 能对 GBK 解码的,所以一开始打开它觉得没问题,后来我输出在 terminal 的时候发现乱码了,就猜到是编码的问题了_______________________________

                  • 我就在想明明重新编码就可以,你干嘛要重建。要测试的话,数据库重建前面几十个动画然后简单测试一下就可以了~不需要彻底重建。。不然多耗时间啊。。人生苦短

  • 哇靠!这种东西不放在新番提醒里真是浪费>_>

    • 新番提醒一直懒得动手捣鼓。。渣渣我一直都是手动用谷歌日历的。。话说你多说的设置域名是不是该改一下。。

      • 哇哇哇忘记了=-=!

        • 刚想明白,其实这个URL获取器就可以做个新番提醒。。。update功能还可以直接查看最近出了什么新动画。。。

  • 猫箱内の巴托拉

    有时间试试看对了~~我的博客备案后域名换了,现在地址是http://blog.ushiromiyabatora.com

    • 已修改过来了。

  • 我又来膜拜大神了

  • 我觉得可以加个抓B站的哟。例如http://bangumi.bilibili.com/anime/3530/可以分析每集AV地址之后找到真实链接下载。。真实链接gayhub上貌似有源码QVQ,这样就能实现自动化下载啦

    • 呸,AV号地址,才不是AV地址!!!

      • 事实上我自己是有这么干,记录一个bangumi的id,然后爬虫不断检测,有的话就在VPS上把视频和弹幕(转ass)下载下来,然后同步dropbox,给自己发封邮件,只要一开电脑,dropbox同步完就可以看了。。