欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSDN 2020 博客之星实时数据排名(Python 爬虫 + PyEcharts)

程序员文章站 2022-06-26 17:08:25
CSDN 2020 博客之星实时数据排名:csdn.itrhx.comCSDN 一年一度的博客之星评选开始了,官网地址:https://bss.csdn.net/m/topic/blog_star2020 ,由于官网是按照随机编号排序的,没有按照票数多少排序,为了方便查看排名,可以使用 Python 爬虫 + PyEcharts 来实现实时数据排名。打开 Google Chrome 的审查工具,可以找到一个 getUsers 的请求,请求地址为:https://bss.csdn.net/m/topic...

CSDN 2020 博客之星实时数据排名:csdn.itrhx.com


CSDN 一年一度的博客之星评选开始了,官网地址:https://bss.csdn.net/m/topic/blog_star2020 ,由于官网是按照随机编号排序的,没有按照票数多少排序,为了方便查看排名,可以使用 Python 爬虫 + PyEcharts 来实现实时数据排名。

打开 Google Chrome 的审查工具,可以找到一个 getUsers 的请求,请求地址为:https://bss.csdn.net/m/topic/blog_star2020/getUsers,请求方式为 POST,返回的是 JSON 格式的数据,里面包含了每一位博主的相关信息。

CSDN 2020 博客之星实时数据排名(Python 爬虫 + PyEcharts)

找到请求接口就不难了,使用 Python 爬虫很容易将其爬取下来,然后对数据进行处理,按照票数进行排序,再配合 PyEcharts 就可以进行数据展示了,完整代码如下:

# ====================================
# --*-- coding: utf-8 --*--
# @Time    : 2021-01-12
# @Author  : TRHX • 鲍勃
# @Blog    : www.itrhx.com
# @CSDN    : itrhx.blog.csdn.net
# @FileName: csdn_blog_star_2020.py
# @Software: PyCharm
# ====================================


import json
import requests
from datetime import datetime
from pyecharts.components import Table
from pyecharts.options import ComponentTitleOpts


def crawl_data() -> dict:
    url = 'https://bss.csdn.net/m/topic/blog_star2020/getUsers'
    headers = {
        'authority': 'bss.csdn.net',
        'origin': 'https://bss.csdn.net',
        'referer': 'https://bss.csdn.net/m/topic/blog_star2020',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-origin',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    data = {
        'number': ''
    }
    response = requests.post(url=url, headers=headers, data=data)
    response_json = json.loads(response.text)
    return response_json


def data_processing(data) -> list:
    all_data = []
    csdn_data = data['data']
    for csdn in csdn_data:
        vote_num = int(csdn['vote_num'])                   # 票数
        number = csdn['number']                            # 编号
        csdn_id = csdn['title']                            # CSDN ID
        nick_name = csdn['nick_name']                      # 昵称
        code_level = csdn['codeLevel']                     # 码龄
        article_count = csdn['article_count']              # 文章数
        csdn_url = 'https://blog.csdn.net/' + csdn_id      # 主页
        url = csdn['url']                                  # 投票地址
        # avatar = c['avatar']                             # 头像地址
        personal_information = [vote_num, number, csdn_id, nick_name, code_level, article_count, csdn_url, url]
        all_data.append(personal_information)
    # 按照票数排序
    all_data_sorted = sorted(all_data, key=lambda x: x[0], reverse=True)
    # 添加排名
    rank = 1
    for a in all_data_sorted:
        a.insert(0, rank)
        rank += 1
    # print(all_data_sorted)
    return all_data_sorted


def create_table(data, crawl_time):
    table = Table(page_title="TRHX丨CSDN 2020 博客之星实时数据")
    headers = ["排名", "票数", "编号", "CSDN ID", "CSDN 昵称", "码龄", "文章数", "主页", "投票地址"]
    rows = data
    table.add(headers, rows)
    table.set_global_opts(
        title_opts=ComponentTitleOpts(
            title="CSDN 2020 博客之星实时数据排名(每10分钟更新一次)",
            subtitle='上次更新时间:' + str(crawl_time) + '    数据来源:https://bss.csdn.net/m/topic/blog_star2020' + "\n\n作者:TRHX • 鲍勃    为作者投上一票吧:https://bss.csdn.net/m/topic/blog_star2020/detail?username=qq_36759224",
            title_style={"style": "font-size:20px; font-weight:bold; text-align: center"},
            subtitle_style={"style": "font-size:15px; text-align: center"})
    )
    table.render("csdn_blog_star_2020.html")


if __name__ == '__main__':
    time_now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    json_data = crawl_data()
    data_sorted = data_processing(json_data)
    create_table(data_sorted, time_now)

打开生成的 csdn_blog_star_2020.html 文件,如下图所示:

CSDN 2020 博客之星实时数据排名(Python 爬虫 + PyEcharts)

我们可以将 Python 代码部署至服务器,设置定时任务,每十分钟爬取一次数据并更新进行展示,如果有域名的话,还可以做一个域名解析,这样一个简单的实时数据排名就做好啦!

实时数据排名查看地址:csdn.itrhx.com


博主有幸能够进入 2020 博客之星 TOP200,如果我的文章对您有所帮助的话,烦请为我投上您宝贵的一票吧!(PS:每天都可以投哦!)


TRHX • 鲍勃 投票地址:

https://bss.csdn.net/m/topic/blog_star2020/detail?username=qq_36759224

或者扫描以下二维码为我投票:

CSDN 2020 博客之星实时数据排名(Python 爬虫 + PyEcharts)

一入 IT 深似海,从此学习无绝期!2021,加油!


本文地址:https://blog.csdn.net/qq_36759224/article/details/112547454