为了督促本身更加积极地写博客,我但愿有一个排名系统能让我看到本身的进步。可是博客园对用户的排名体系相对是比较少的,主要是推荐博客排行和积分排行;但它们人数少难度大,短时间内难以进入排名。所以我决定自力更生,爬取一份博客园粉丝数排行榜。html
为避免误(封)会(号),先作以下声明:git
一、本排行榜非官方发布,是我经过爬虫获得的。github
二、爬虫过程一直坚持网站友好原则:服务器
(1)只查询网站公开内容(固然,非公开的我也不会)cookie
(2)为避免对服务器形成压力,一直使用单线程发送请求,且每两个请求之间都设置了必定时间间隔网站
首先介绍一下爬虫的思路,不感兴趣的朋友能够直接拉到文章最后看结果,或者点击这里查看:博客园粉丝数排行榜(粉丝数很多于100)spa
思路基本分两步:一、初始化种子用户;二、迭代。线程
这一步的目标,是找到尽量多的种子用户,种子用户最好发过文章,尤为是高质量文章,这样他们有较大几率有较多的粉丝。htm
下面是我选取的种子用户来源,在博客园的对应位置在下图标出:blog
获得种子用户的用户名后,即可以在其我的页面获取昵称、粉丝数、园龄、文章首页等基本信息。例如,榜首(昵称:孤傲苍狼)的用户名是xdp-gacl,则他的我的页面是:https://home.cnblogs.com/u/xdp-gacl/
迭代的目的是从种子用户出发,找到其余粉丝数较多的用户;方法是获取种子用户“关注的人”——由于被关注的人有较大几率有更多的粉丝。用户关注的人在这里(仍是以榜首孤傲苍狼为例):https://home.cnblogs.com/u/xdp-gacl/followees/
所以一轮迭代的步骤是这样的:
(1)遍历当前用户列表,获得他们关注的用户;
(2)将这些关注的用户加入到当前用户列表。
如此循环往复,进行多轮迭代;直到再也不有新的用户为止。
有义务说明一下本排行榜的不足之处:
(1)爬取时间主要在5.10-5.19,排行榜不会反映在此期间及以后发生的变化(如用户粉丝数上涨)。
(2)经过这种方式,确定没法爬取全部用户信息,可是粉丝数较多的用户被爬到的几率要大得多;所以为了尽量保证准确性,排行榜只列出了粉丝数很多于100的用户。
(3)排行究竟漏掉了多少用户,还是一个未知数,若是你认为有什么方法上的漏洞,或者有漏掉的用户,欢迎讨论。
本次爬虫使用的技术比较常规:语言使用Python3,发送请求使用requests库,HTML解析使用BeautifulSoup,数据存储使用Redis;此外,爬虫过程当中还会遇到动态加载页面、使用cookie进行身份校验等,都比较常见,再也不赘述。
数据存储之因此选择Redis,主要是考虑到数据在内存中,访问快,且Redis提供了丰富的数据类型(若有序集合),使用起来比较方便;为了保证数据不丢失,必定要保证Redis开启了持久化,最好开启AOF持久化。
排行榜(粉丝数不小于100)能够点击连接查看:博客园粉丝数排行榜
前25名截图以下:
其中:
一、榜首是孤傲苍狼,有1.8w+粉丝,遥遥领先;在我爬虫这几天,涨了几十名粉丝,实在厉害。
二、粉丝数10000以上的,共有5位;粉丝数1000以上的,有286位;粉丝数100以上的,有3068位。
三、官方帐号博客园团队有4644位粉丝,排第26位。
四、若是你的目标是进入前100名,至少须要2200+位粉丝;若是你的目标是进入前1000名,至少须要300+位粉丝。