python获取指定用户csdn博客列表并查询质量分,将结果保存到excel

news2024/12/28 21:36:09

API接口

获取博文总数接口

username=hougang,表示获取用户hougang的所有博文数量

https://blog.csdn.net/community/home-api/v1/get-tab-total?username=hougang

获取博文列表接口

https://blog.csdn.net/community/home-api/v1/get-business-list

质量分接口

https://bizapi.csdn.net/trends/api/v1/get-article-score

代码实现 

import pandas as pd
import requests
import math
import datetime

# 设置博文用户名
username = 'hougang'

# 设置获取质量分的请求参数,可以通过浏览器访问https://www.csdn.net/qc,获取请求头参数
X_Ca_Key = "203930474"
X_Ca_Nonce = "a88f3e4b-87ae-4d2e-b52b-cc342869829b"
X_Ca_Signature = "jm6aZZ6mMvAanqXJZR4E0LMKBElXbGWr3TPZyYVSph4="


# 获取所有博文数量
def get_articles_count():
    url = f"https://blog.csdn.net/community/home-api/v1/get-tab-total?username={username}"

    # 反爬,设置请求头
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }

    response = requests.get(url, headers=headers)
    # print(response.json())

    # 获取博文总数
    articles_count = response.json()['data']['blog']
    # print(articles_count)

    # 返回博文总数
    return articles_count


# 获取博文列表,包含质量分数
def get_article_list():
    # 定义变量存储所有文章信息
    articles = []

    # 设置每页查询数量
    page_size = 80

    # 获取所有博文数量
    articles_count = get_articles_count()

    # 计算分页数量
    count = math.ceil(articles_count / page_size)
    # print(count)

    # 分页循环获取文章列表
    for i in range(count):
        # 设置页码
        page = i + 1
        # print(page)

        # 构建请求url
        url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page={page}&size={page_size}&businessType=blog&orderby=&noMore=false&year=&month=&username={username}"

        # 反爬,设置请求头
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
        }
        response = requests.get(url, headers=headers)

        # 获取当前页文章列表
        data_list = response.json()['data']['list']
        # print(data_list)

        # 获取每篇博文信息,包含标题,url,发布时间,质量分和质量描述
        for article in data_list:
            # 博文url
            article_url = article['url']

            # 获取博文url质量分和message
            res = get_article_quality_score(article_url)

            articles.append(
                {
                    'title': article['title'],
                    'url': article_url,
                    'postTime': article['postTime'],
                    "score": res['score'],
                    "message": res['message']
                }
            )
    # print(articles)

    # 返回所有文章信息
    return articles


# 传入文章url,返回文章质量分和质量描述
def get_article_quality_score(article_url):
    # 查质量分接口
    url = f"https://bizapi.csdn.net/trends/api/v1/get-article-score"

    # 设置请求头
    headers = {
        "accept": "application/json, text/plain, */*",
        "x-ca-key": X_Ca_Key,
        "x-ca-nonce": X_Ca_Nonce,
        "x-ca-signature": X_Ca_Signature,
        "x-ca-signature-headers": "x-ca-key,x-ca-nonce",
        "x-ca-signed-content-type": "multipart/form-data"
    }

    # post提交data
    data = {"url": article_url}

    # 发送post请求
    response = requests.post(url=url, headers=headers, data=data)

    # 博文质量分
    score = response.json()['data']['score']

    # 描述
    message = response.json()['data']['message']

    score_obj = {
        "score": score,
        "message": message
    }

    # 返回包含分数和描述的对象
    return score_obj


# 将文章信息写入excel文件
def write_to_excel():
    # 获取博文数据
    print("开始获取博文数据")
    data = get_article_list()

    # 将当前时间作为excel文件名
    now = datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S")

    # 将博文数据写入excel
    df = pd.DataFrame(data)
    df.to_excel(f"{now}.xlsx", index=False)
    print(f"将博文数据写入ecxel文件成功,文件名称:{now}.xlsx")


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # 获取文章总数量
    articles_sum = get_articles_count()
    print(f"博文总数为:{articles_sum}")

    # 获取博文列表,包含质量分
    # article = get_article_list()
    # print(article)

    # 获取博文数据,并写入excel
    write_to_excel()

    pass

用法示例

# python main.py
博文总数为:36
开始获取博文数据
将博文数据写入ecxel文件成功,文件名称:2023-12-04_144607.xlsx

Process finished with exit code 0

数据展示

种草 

我的博文内容主要针对“计算机网络”、“安全”、“运维”和“云计算”方向,感兴趣朋友的请关注我,我将不定期发布新的博文并不断改进已发布博文。

后期依据大家对博文的评论,点赞及关注情况,针对大家感兴趣的内容我也会录制视频并整理出成套的学习资料免费分享给大家,期待能和大家一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1283934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在文本框中添加单位

<el-col :span"12"><el-form-item label"进度" prop"schedule":rules"[{required: true, message:进度不能为空, trigger:blur},{validator: validator.isFloatGteZero, trigger:blur}]"><el-input v-model"input…

2024搞钱方式,这些你都了解吗?

气温日渐降低&#xff0c;凛冬已至&#xff0c;年关将近&#xff0c;咱还得多多搞钱才能喜气洋洋过大年不是&#xff1f;拿满全勤搞绩效&#xff0c;累死累活KPI……为了生活咱也是付出了太多。可是咱程序员该咋办呢&#xff1f; 相信有机智的小伙伴已经脱口而出了&#xff1a…

分布式搜索引擎elasticsearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查…

从0开始使用Maven

文章目录 一.Maven的介绍即相关概念1.为什么使用Maven/Maven的作用2.Maven的坐标 二.Maven的安装三.IDEA编译器配置Maven环境1.在IDEA的单个工程中配置Maven环境2.方式2&#xff1a;配置Maven全局参数 四.IDEA编译器创建Maven项目五.IDEA中的Maven项目结构六.IDEA编译器导入Mav…

关于rocketMQ踩坑的那些事

在最近&#xff0c;我所写的这个项目需要使用到rocketMQ&#xff0c;为了图方便我便使用的是Windows版本的&#xff0c;但是在使用的过程中首先是发现无法发送消息出去&#xff0c;报错信息为 org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still …

做一件荒谬的事:用AI推理下一次双色球结果 v0.1

做一件荒谬的事&#xff1a;用AI推理下一次双色球结果 v0.1 引言 事情的起因是父亲被亲戚安利&#xff0c;突然喜欢上了双色球&#xff0c;连规则和开奖结果怎么看都不懂的他&#xff0c;让我研究研究这个事&#xff0c;给他选个号。他还说老家有好几个人中了几百万&#xff…

unity学习笔记18

模型文件属性简介 1.动画类型&#xff1a;一共有四种&#xff1a;无 表示没有动画&#xff0c;旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的&#xff0c;最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…

CoreDNS实战(一)-构建高性能、插件化的DNS服务器

1 概述 在企业高可用DNS架构部署方案中我们使用的是传统老牌DNS软件Bind, 但是现在不少企业内部流行容器化部署&#xff0c;所以也可以将Bind替换为 CoreDNS &#xff0c;由于 CoreDNS 是 Kubernetes 的一个重要组件&#xff0c;稳定性不必担心&#xff0c;于此同时还可将K8S集…

微信扫码登录修改二维码的样式

默认是这个样子二维码都没有展示全 微信的了的 js 对象是这个样子&#xff0c;既然大家看到我这篇文章&#xff0c;想必里面的属性已经知道了&#xff0c;这里不做赘述。 let href data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6ODAlO21hcmdpbi10b3A6MH0uaW1wb3d…

价差后的几种方向,澳福如何操作才能盈利

在价差出现时&#xff0c;澳福认为会出现以下几种方向。 昂贵资产的贬值和便宜资产的平行升值。昂贵的资产贬值&#xff0c;而便宜的资产保持不变。昂贵资产的贬值和便宜资产的平行贬值&#xff0c;但昂贵资产的贬值速度更快&#xff0c;超过便宜资产。更贵的一对的进一步升值和…

Pycharm配置jupyter使用notebook详细指南(可换行conda环节)

本教程为事后记录&#xff0c;部分图片非实操图片。 详细记录了pycharm配置jupyter的方法&#xff0c;jupyter添加其他conda环境的方法&#xff0c;远程密码调用jupyter的方法&#xff0c;修改jupyter工作目录的方法。 文章目录 一、入门级配置1. Pycharm配置Conda自带的jupyt…

Python Opencv实践 - Yolov3目标检测

本文使用CPU来做运算&#xff0c;未使用GPU。练习项目&#xff0c;参考了网上部分资料。 如果要用TensorFlow做检测&#xff0c;可以参考这里 使用GPU运行基于pytorch的yolov3代码的准备工作_little han的博客-CSDN博客文章浏览阅读943次。记录一下自己刚拿到带独显的电脑&a…

springboot数据源配置

springboot数据源配置 数据层解决方案——持久化技术 内置持久化解决方案——jdbcTemplate 内置数据库 H2一般用于测试环境&#xff0c;配置profiels&#xff0c;只在开发阶段使用&#xff0c;让他在上线的时候不走这里就可以了 要使用内嵌的数据库H2,要先导入jar包

python提取通话记录中的时间信息

您需要安装适合中文的SpaCy模型。您可以通过运行 pip install spacypython -m spacy download zh_core_web_sm来安装和下载所需的模型。 import spacy# 加载中文模型 nlp spacy.load(zh_core_web_sm)# 示例电话记录文本 text """ Agent: 今天我们解决一下这…

语音识别从入门到精通——1-基本原理解释

文章目录 语音识别算法1. 语音识别简介1.1 **语音识别**1.1.1 自动语音识别1.1.2 应用 1.2 语音识别流程1.2.1 预处理1.2.2 语音检测和断句1.2.3 音频场景分析1.2.4 识别引擎(**语音识别的模型**)1. 传统语音识别模型2. 端到端的语音识别模型基于Transformer的ASR模型基于CNN的…

14、pytest像用参数一样使用fixture

官方实例 # content of test_fruit.py import pytestclass Fruit:def __init__(self, name):self.name nameself.cubed Falsedef cube(self):self.cubed Trueclass FruitSalad:def __init__(self, *fruit_bowl):self.fruit fruit_bowlself._cube_fruit()def _cube_fruit(s…

【从零开始学习Redis | 第六篇】爆改Setnx实现分布式锁

前言&#xff1a; 在Java后端业务中&#xff0c; 如果我们开启了均衡负载模式&#xff0c;也就是多台服务器处理前端的请求&#xff0c;就会产生一个问题&#xff1a;多台服务器就会有多个JVM&#xff0c;多个JVM就会导致服务器集群下的并发问题。我们在这里提出的解决思路是把…

Spring Security 自定义异常失效?源码分析与解决方案

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

python pyaudio对音频进行端点检测,检测出说话区间

python pyaudio对音频进行端点检测&#xff0c;检测出说话区间 主要采用过零率和语音能量来进行检测&#xff0c;并设置双阈值。 代码如下&#xff1a; # -*- coding: utf-8 -*- import wave import os import matplotlib.pyplot as plt import numpy as np# 判断是否变号 de…

差分基准站

差分基准站&#xff0c;又称参考接收机&#xff0c;是一种固定式卫星接收机&#xff0c;用于提高卫星定位精度。 差分基准站的作用是提供已知位置和准确的位置信号&#xff0c;以纠正其他移动定位终端接收器接收到的卫星信号中的误差。 卫星定位信号会受到多种因素的影响&#…