我的需求
看我头像,就知道我是哪个道上的人。
在上古时代,看动画都是靠下载的,而我至今依旧保留着这个习惯。
留心关注的动画,定时去种子网站上去下载种子,然后下载,观看。
一旦你发现这个流程熟悉了,就会觉得非常机械。
于是我就写了一个爬虫,用来下载动画种子了。
代码靠后,让我先来个截图上真相
先说一下这个爬虫的大概流程:
1.通过命令行,输入想要搜索的动画,最好是字幕组+动画关键词。
2.爬虫会先检索出对应的动画列表,并且获取这个列表有多少页。
3.每一页,回去爬出对于的详细下载页,保存为一个list,然后再去爬详细下载页
4.爬详细下载页的详细数据,片名、详细网址、hash值、发布时间、文件大小。
5.进行种子下载,并对于文件夹中已经存在的同名文件,会跳过。
6.爬完一页的数据后,会继续爬下一页,直到全部爬完。
7.在爬完数据后,对自动打开种子文件夹,并且保存本次爬的数据。
种子文件夹:
爬虫历史记录
再说一下代码
首先,我说明一下,由于本人我是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呢,就没干过什么正经事,但是好玩啊~~~