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
5Hollis在csdn6182
6小傅哥5962
7一个处女座的程序猿5652
8李锐博恩5640
9小林coding5572
10ThinkWon5515
11谙忆5283
12中间件兴趣圈5215
131_bit5165
14qq26480087264712
15Jack-Cui4670
16第三女神程忆难4615
17TrueDei4612
18lovelife1104383
19LaoYuanPython4310
20单片机菜鸟哥4242
21程序猿小亮3728
22柔若寒3244
23小山猪的沙塔2673
24ReCclay2649
25艺博东2546
26JasonLee’blog1771
27Alice菌1687
28记得诚1343
29公众号-JavaEdge1329
30小麦大叔1286
31carl-zhao1171
32牧小农1158
33考古学家lx1084
34riemann_1051
35Engineer-Bruce_Yang1048
36herosunly981
37SoWhat1412969
38许进进963
39Data-Mining947
40刘炫320926
41AI 菌913
42刘一哥GIS906
43梦想橡皮擦889
44cutercorley887
45webmote864
46Bubbliiiing863
47江南、董少852
48xcbeyond848
49xindoo843
50象在舞839

扫描下方二维码,加入官方粉丝微信群,可以与我直接交流,还有更多福利哦~

在这里插入图片描述

一头小山猪 CSDN认证博客专家 全栈开发工程师 大数据高级开发 大数据金牌讲师
若非一番寒彻骨,哪得梅花扑鼻香。全栈开发工程师,大数据高级开发工程师。大数据金牌讲师,知名机构合作讲师,各云大学及平台合作讲师,高校外聘讲师。微信公众号:微光点亮星辰,在学习的道路上一同见证点点滴滴。
相关推荐
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值