2020博客之星评选 - 票数排行(最终Top50)
Posted 一头小山猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020博客之星评选 - 票数排行(最终Top50)相关的知识,希望对你有一定的参考价值。
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。
- 对于文章中出现的任何错误请大家批评指出,一定及时修改。
- 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
- 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。
2020博客之星评选 - 票数排行(最终Top50)
本文关键字:2020、博客之星、爬虫、票数排行
文章目录
一、博客之星
2020年的博客之星已经开始啦,根据规则投票会持续一段时间,但是在活动页面并未有实时排行榜,本文将用爬虫实现数据的采集以及排序,可以直接查看到评比排行~
文末将展示最终的Top50博主名单。
二、实现思路
1. 确定数据源
首先我们需要在页面上获得数据,由于每次刷新数据都是会变化的,所以一般都是Ajax请求,我们需要用到开发者工具来查看网络请求。
- 如何呼出开发者工具
在进行页面分析的时候,浏览器的开发者工具是不必可少的,笔者以蓝狐(火狐浏览器开发版)为例。对于其他的浏览器,主要都是基于Gecko(火狐内核)、Blink(Chrome内核)、Webkit(Safari内核)、Trident(IE内核)来套的壳子,所以整体的呼出方式不会差别很大。
首先我们在页面空白处点击右键 -> 点击检查元素
- 寻找数据源
页面链接:https://bss.csdn.net/m/topic/blog_star2020,打开后切换至网络栏目,点击重新载入:
可以按照类型排序,过滤掉一些静态资源的请求。发现数据来自于一个getUser的接口,返回的数据可以使用JSON格式进行解析。
2. 实现步骤
找到数据源以后,步骤就比较明确了。在获取数据之后进行解析,提取出我们需要的两个字段:博主名称和当前票数,最后再对数据排序输出。
我们将使用Python来进行实现,需要先安装scrapy(爬虫框架)和json(方便解析JSON格式数据)两个组件,可以使用如下命令:
pip install scrapy
pip install json
三、实现过程
1. 创建项目
安装好scrapy后,在命令终端中选定一个文件夹,使用如下命令创建一个项目:
scrapy startproject StarRank
其中项目名称为StarRank,创建完成后可以直接使用Pycharm打开,项目结构如下:
2. 数据采集
接下来我们在spiders文件夹中创建一个python文件:star_spider.py,来完成数据的采集。
import scrapy
class StarSpider(scrapy.Spider):
# 定义爬虫名称,在启动任务时指定
name = "star"
def start_requests(self):
# 声明访问地址链接
url = "https://bss.csdn.net/m/topic/blog_star2020/getUsers"
# 发送请求,同时指定回调函数(自定义)
yield scrapy.FormRequest(url, callback=self.parse)
3. 解析排序
数据接收到之后是一个JSON结构的字符串,我们可以引入json库来快速的解析,同时对数据进行排序,回调函数内容如下:
def parse(self, response):
# 获取json数据中的data部分
data_list = json.loads(response.text)['data']
# 定义一个字典类型
dict =
for data in data_list:
# 提取出博主名称与当前票数,成对儿存放
dict[data["nick_name"]] = int(data["vote_num"])
# 使用sorted根据字典的value进行降序排序
rank = sorted(dict.items(),key=lambda x:x[1],reverse=True)
i = 1
# 对元组进行遍历,输出结果
for name,count in rank:
print("第" + str(i) + "名票数:" + str(count) + ",博主:" + name)
i += 1
4. 完整代码
import scrapy
import json
class StarSpider(scrapy.Spider):
name = "star"
def start_requests(self):
url = "https://bss.csdn.net/m/topic/blog_star2020/getUsers"
yield scrapy.FormRequest(url, callback=self.parse)
def parse(self, response):
data_list = json.loads(response.text)['data']
dict =
for data in data_list:
dict[data["nick_name"]] = int(data["vote_num"])
rank = sorted(dict.items(),key=lambda x:x[1],reverse=True)
i = 1
for name,count in rank:
print("第" + str(i) + "名票数:" + str(count) + ",博主:" + name)
i += 1
代码编写完成后,进入到项目的根目录,即spiders文件夹的上一级目录,使用如下命令即可启动项目:
scrapy crawl star
5. 关闭日志
对于一般的数据处理流程来说,应该把数据直接保存至json或csv文件中,然后再使用单独的程序进行读取和处理。本例为了方便对数据直接进行了处理,带来的问题就是每次执行时会有很多爬虫任务执行时产生的日志信息,我们可以修改settings.py文件,在其中将日志级别调整至ERROR即可:
LOG_LEVEL = 'ERROR'
最终执行效果如下:
四、今日排行
经过了半个月的激动人心、惊心动魄、眉来眼去。。。的拉票阶段,最终的Top50名单出炉:
排名 | 博主 | 票数 |
---|---|---|
1 | 敖 丙 | 10275 |
2 | 谷哥的小弟 | 7856 |
3 | 帅地 | 6791 |
4 | 沉默王二 | 6293 |
5 | Hollis在csdn | 6182 |
6 | 小傅哥 | 5962 |
7 | 一个处女座的程序猿 | 5652 |
8 | 李锐博恩 | 5640 |
9 | 小林coding | 5572 |
10 | ThinkWon | 5515 |
11 | 谙忆 | 5283 |
12 | 中间件兴趣圈 | 5215 |
13 | 1_bit | 5165 |
14 | qq2648008726 | 4712 |
15 | Jack-Cui | 4670 |
16 | 第三女神程忆难 | 4615 |
17 | TrueDei | 4612 |
18 | lovelife110 | 4383 |
19 | LaoYuanPython | 4310 |
20 | 单片机菜鸟哥 | 4242 |
21 | 程序猿小亮 | 3728 |
22 | 柔若寒 | 3244 |
23 | 小山猪的沙塔 | 2673 |
24 | ReCclay | 2649 |
25 | 艺博东 | 2546 |
26 | JasonLee’blog | 1771 |
27 | Alice菌 | 1687 |
28 | 记得诚 | 1343 |
29 | 公众号-JavaEdge | 1329 |
30 | 小麦大叔 | 1286 |
31 | carl-zhao | 1171 |
32 | 牧小农 | 1158 |
33 | 考古学家lx | 1084 |
34 | riemann_ | 1051 |
35 | Engineer-Bruce_Yang | 1048 |
36 | herosunly | 981 |
37 | SoWhat1412 | 969 |
38 | 许进进 | 963 |
39 | Data-Mining | 947 |
40 | 刘炫320 | 926 |
41 | AI 菌 | 913 |
42 | 刘一哥GIS | 906 |
43 | 梦想橡皮擦 | 889 |
44 | cutercorley | 887 |
45 | webmote | 864 |
46 | Bubbliiiing | 863 |
47 | 江南、董少 | 852 |
48 | xcbeyond | 848 |
49 | xindoo | 843 |
50 | 象在舞 | 839 |
扫描下方二维码,加入官方粉丝微信群,可以与我直接交流,还有更多福利哦~
以上是关于2020博客之星评选 - 票数排行(最终Top50)的主要内容,如果未能解决你的问题,请参考以下文章
2022 年度「博客之星」评选TOP 200进100结果已出炉
2021 CSDN 年度博客之星评选 TOP 100完整榜单