众所周知,acfun与bilibili一直是国内受到广泛关注的宅社区以及二次元社区,一直以来我有一个想法,便是如何获知两个网站里最有意思的作品,仅仅依靠官方的推荐并不足以满足个人化的需求。
于是这只小爬虫便诞生了。
0.一开始的想法是抓取b站av8到av2000000+的近两百万个视频的播放量,然后降序排序。
但面临着两个问题,一是播放页并非静态网页,播放量来自于js自动生成,于是我们通过抓取一个视频的uid与aid来打开含有播放量的静态页面,从而达到目的。
二是某些投稿已被和谐,会出现404 not found错误,于是我们通过try&except的方式跳过死链。
解决以上两个问题后,发现又有了两个新的问题,一个是每一个视频页面的cid与uid出现方式不同(不同视频源所导致),导致正则表达式引擎无法正确抓取出aid&cid号。另一个问题是速度过慢,10M宽带环境下提取100个视频播放量就需要耗时40s左右。前者需要分析每一种视频源的html格式,后者需要多线程解决,极大的增加了难度。
1.在第一种爬虫想法搁浅后,通过相关查阅,我发现一个或许可以优化的方法,便是通过分类来抓取,我们知道b站有每个区导航的页面,例如http://www.bilibili.com/video/part-twoelement-1.html 表示完结番剧的第一页,查看源代码我们发现这是个静态页面,播放量已经生成,例如这是其中一段html代码:
<a href="/video/av2198990/" target="_blank" class="title">【意大利语配音】秒速五厘米【诸神】</a><div class="info">硬盘 意大利语版的秒五,也没有什么好介绍的,只是想吐槽欧洲配音的开头都没有体现出萝莉正太音啊=。=</div><div class="w-info"><i class="gk" title="观看" number="1063">1063</i><i class="sc" title="收藏" number="32">32</i><i class="dm" title="弹幕" number="18">18</i><a href="http://space.bilibili.com/98665" target="_blank" title="死蝶浮月-真月"><i class="up r10000">死蝶浮月-真月</i></a><i class="date" title="日期">2015-04-08 20:51