Python:开箱即用!撸一个动画种子下载爬虫

889 阅读3分钟

我的需求

看我头像,就知道我是哪个道上的人。

在上古时代,看动画都是靠下载的,而我至今依旧保留着这个习惯。

留心关注的动画,定时去种子网站上去下载种子,然后下载,观看。

一旦你发现这个流程熟悉了,就会觉得非常机械。

于是我就写了一个爬虫,用来下载动画种子了。

代码靠后,让我先来个截图上真相

爬虫.gif

image.png

先说一下这个爬虫的大概流程:

1.通过命令行,输入想要搜索的动画,最好是字幕组+动画关键词。

2.爬虫会先检索出对应的动画列表,并且获取这个列表有多少页。

3.每一页,回去爬出对于的详细下载页,保存为一个list,然后再去爬详细下载页

4.爬详细下载页的详细数据,片名、详细网址、hash值、发布时间、文件大小。

5.进行种子下载,并对于文件夹中已经存在的同名文件,会跳过。

6.爬完一页的数据后,会继续爬下一页,直到全部爬完。

7.在爬完数据后,对自动打开种子文件夹,并且保存本次爬的数据。

种子文件夹:

image.png

爬虫历史记录

image.png

再说一下代码

image.png

首先,我说明一下,由于本人我是iOS开发,所以写的Python代码一点也不Pythonic,反而很Swifty。

另外,对于Python的多线程下载这块,我虽然尝试使用多线程下载,可是并没有达到预期的效果。

主要使用的Python轮子也就requests和bs4,虽然也尝试是用lxml进行网页的element获取,不过我更喜欢使用bs4。

另外对于字符串类型的处理也是非常重要的。

我写Python的感受和可以改进的地方

感受

其实爬虫的本质就是请求抓网页,发现网页元素的规律,使用循环语句反复。

其实这个爬虫我去年已经完成,只是今年使用的时候发现,针对爬虫的异常情况的处理并不是很友好,于是这次在优化代码的同时,大大提高了其健壮性。

写一个爬虫并不难,对于弱语言的小心处理才是关键,这一点同样适用于JavaScript。

因为爬虫爬出来的信息一般都是包含一个元素的数组,之前我总是很简单的使用array[0]取值。

这样是非常不安全的!在Swift中我常常使用guard let e = array.first else { return }去做守护,而Python里面并没这样的糖语法,所以请忍耐代码里面的if len(array) > 0判断,这一切都是出于能完整的爬完一个流程。

try-expect-finally虽然不是万能,不过在一些没有把握的地方,用一用,至少对于排查问题是很关键的。

可以改进的地方

1.继续加强代码健壮性,对异常情况的处理。将异常情况进行本地保存。

2.目前爬取的记录是简单的使用csv进行保存,可以考虑使用数据库进行存储。

3.可以通过脚本,开启定时任务,添加动画列表,每次执行一次,并关联下载软件,可以真正做到自动化。

4.编写GUI,做到可视化界面。

最后

请通过我掘金账号里面的GitHub链接进去下载吧,毕竟爬虫只是学习使用,如果长期爬也会对网站造成影响,现在能够下载动画种子的网站本来就不多了,还望大家多多理解!!!

不宜频繁爬取,不宜频繁爬取,不宜频繁爬取!重要的事情说三遍!!!

如果喜欢,请给我的这篇文章点赞,Github的这个项目一个star,感激不尽!

学Python呢,就没干过什么正经事,但是好玩啊~~~