批量获取CSDN文章对文章质量分进行检测,有助于优化文章质量
📚目录
- ⚙️简介
- ✨分析获取步骤
- ⛳获取文章列表
- ☘️前期准备
- ✨ 接口解析
- ⚡️ 获取文章的接口
- ☄️文章质量分接口
- ⭐接口分析
- ⌛代码实现:
- ⚓核心代码:
- ⛵测试用例:
- ⛴ 运行效果:
- ☘️增加Excel导出
- ✍️结束
⚙️简介
有时候我们写文章是为了记录当下遇到的bug进行简单记录,这样CSDN会对文章进行算法评估文章的质量,这样就会导致我们写的文章字数较少,被系统误判,当然字数只是算法的一方面,算法会多多个角度进行评估,但是我觉得字数占比巨大,如果文章的字数啥的较少,对于我们人来说可能是比较好的,我可以清晰明了知道这篇文章大致讲了什么,我当前遇到的问题是不是可以在这里面得到我需要的。这一类文章不出意外系统评级的分数应该不会特别高,文字少了排版,配图,段落结构、正文长度都会受到影响。
所以我想看看我之前写的文章质量分到底怎么样,看看是不是有一些简单明了几行代码,几句话就可以说的清楚的事情需要我长篇大论的写才能得到高分?但是官网的查质量分需要一篇一篇的查询效率极低,好歹这些年大大小小的文章也写了百来篇,用手那岂不是点出火星子都出来。

✨分析获取步骤
- 获取博主的所有文章,并且拿到对应的url地址。(需要分析接口)
- 获取到url地址,我们需要使用官方查询质量分网页的接口进行请求。(需要分析接口)
- 接口分析完成后,我们就可以按照我们的需求进行代码编写了。
⛳获取文章列表
☘️前期准备
浏览器访问需要获取文章的博主首页地址,并且打开
开发者工具快捷键F12,点击网络选项,我们在刷新页面可以看到发送的请求地址。

然后我们选择XHR过滤掉我们不需要看到请求,但是这里面也没有我们需要的请求,但是没关系,我们只要想一下什么情况下会发送请求获取文章呢?答案就是下滑底部后,会重新发送请求获取新的文章并且渲染到页面。

点击删除请求这样我们下拉就可以清晰看到请求的接口数据

发现就是该接口发送的请求获取文章数据


✨ 接口解析
使用工具请求接口按照浏览器发送的参数进行模拟,看看能拿到啥数据。可以看出这个接口返回的total是null他没给我们总的博客数量,但是没关系我们有的是办法拿到所有文章总数。前面说的主页面刷新有个接口可以得到博客的总条数,我在这简单给你们看一下这个接口。反正没有中条数也不影响我们爬取数据。
该接口可以得到博客总数
https://blog.csdn.net/community/home-api/v1/get-tab-total?username=qq_45502336

⚡️ 获取文章的接口
我们主要还是研究
获取文章的接口
https://blog.csdn.net/community/home-api/v1/get-business-list
这个接口也比较简单只需要携带4个参数:
- 页码:
page第几页 - 页数:
size页码展示的条数 - 用户名称:
username需要查询的博主名 - 业务类型:
businessType默认使用blog这个类型对应

模拟请求获取数据

前面由于选项卡是在最近所以导致返回的条数是null,这一次我们把选项卡选择到文章该接口就又返回了条数。

分析响应体:

响应体分析:
- 文章标题:title
- 文章查看地址:url
- 文章描述:description
- 查看文章的数量:viewCount
- 收藏数:collectCount
- 编辑地址:editUrl
- 等数据
我们本次目的已经达到,这些数据都可以通过这个接口获取到,我们就可以分析查询质量分的接口了。
☄️文章质量分接口
###*❄前期准备
浏览器访问官方质量分页面
https://www.csdn.net/qc

步骤后上面一致,主要的是找到对应的接口就行,这里就不过多解释了。

⭐接口分析
质量分接口
https://bizapi.csdn.net/trends/api/v1/get-article-score
该请求是POST请求

请求参数分析:
- 文章地址:url
需要注意的是请求体的类型是form-data类型

请求头分析(重点)
X-Ca-Key:使用自己浏览器的
X-Ca-Nonce:使用自己浏览器的
X-Ca-Signature:使用自己浏览器的
X-Ca-Signature-Headers:x-ca-key,x-ca-nonce
X-Ca-Signed-Content-Type:multipart/form-data
Accept :application/json, text/plain, */*
响应体分析:
- score:文章的分数
- message:给出的建议

⌛代码实现:
⚓核心代码:
@Service
public class CsdnScoreServiceImpl implements CsdnScoreService {private final String getArticleUrl = "https://blog.csdn.net/community/home-api/v1/get-business-list";private final String getArticlesScoreUrl = "https://bizapi.csdn.net/trends/api/v1/get-article-score";@Overridepublic List<ArticleDetails> getAllTheArticles(String username, String businessType) {List<ArticleDetails> articleDetails = new ArrayList<>();Map<String, Object> param = new HashMap<>(4);param.put("size", 20);param.put("businessType", businessType);param.put("username", username);int index = 0;while (true) {index++;param.put("page", index);String msg = HttpUtil.get(getArticleUrl, param);if (ObjectUtil.isEmpty(msg)) {break;}JSONObject data = JSONUtil.parseObj(msg);ArticleResponse articleResponse = JSONUtil.toBean(data, ArticleResponse.class);if (ObjectUtil.isNotEmpty(articleResponse)&& ObjectUtil.isNotEmpty(articleResponse.getData())&& ObjectUtil.isNotEmpty(articleResponse.getData().getList())) {articleDetails.addAll(articleResponse.getData().getList());} else {break;}}return articleDetails;}@Overridepublic Score getArticlesScore(String url) {Map<String, String> headers = new HashMap<>(6);headers.put("X-Ca-Key", "203930474");headers.put("X-Ca-Signature", "+fkC/Z91B8FRai2qZutPI0OyQCX7IsfVFcS7rPZk+YM=");headers.put("X-Ca-Nonce", "86970a2f-f385-4427-a40b-c90cb17c00b9");headers.put("X-Ca-Signature-Headers", "x-ca-key,x-ca-nonce");headers.put("X-Ca-Signed-Content-Type", "multipart/form-data");headers.put("Accept", "application/json, text/plain, */*");String body = HttpUtil.createPost(getArticlesScoreUrl).headerMap(headers, true).body("url=" + url).execute().body();if (ObjectUtil.isNotEmpty(body)){ScoreResponse scoreResponse = JSONUtil.toBean(body, ScoreResponse.class);if (ObjectUtil.isNotEmpty(scoreResponse)){return scoreResponse.getData();}}return null;}
}
- getAllTheArticles:返回总文章数据
- getArticlesScore : 返回文章的分数

⛵测试用例:
@SpringBootTest
class CsdnScoreApplicationTests {@Resourceprivate CsdnScoreService scoreService;@Testvoid articleDetailsScore() {List<ArticleDetails> allTheArticles = scoreService.getAllTheArticles("自己的名称", "blog");ArticleDetails articleDetails = allTheArticles.get(0);Score articlesScore = scoreService.getArticlesScore(articleDetails.getUrl());System.out.println("-------文章质量分------");System.out.println("文章名称:"+articleDetails.getTitle());System.out.println("文章分数:"+articlesScore.getScore());System.out.println("文章建议:"+articlesScore.getMessage());System.out.println("------- 结束 ------");}}
⛴ 运行效果:

☘️增加Excel导出


不看不知道,一看吓一跳,179篇只有72篇是良好,剩下的都有改进空间,裂开呀.

✍️结束
后续代码会发布到gitee上,有兴趣的可以去下载研究地址
相关文章:
批量获取CSDN文章对文章质量分进行检测,有助于优化文章质量
📚目录 ⚙️简介✨分析获取步骤⛳获取文章列表☘️前期准备✨ 接口解析⚡️ 获取文章的接口 ☄️文章质量分接口⭐接口分析 ⌛代码实现:⚓核心代码:⛵测试用例:⛴ 运行效果:☘️增加Excel导出 ✍️结束 ⚙️简介 有时候我们写文章是为了记录当下遇到的bu…...
从一到无穷大 #17 Db2 Event Store,A Purpose-Built IoT Database Engine
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言Architectural overviewData format and meta-dataEnsuring fast ingestionMulti…...
9月16日,每日信息差
今天是2023年09月16日,以下是为您准备的15条信息差 第一、天猫超市首单“茅小凌”已由菜鸟送达,首单已由菜鸟供应链完成履约,18分钟送达消费者手中 第二、软银考虑对OpenAI进行投资。此外,软银还初步拟收购英国人工智能芯片制造…...
准备篇(二)Python 教程
Part 1 Python 基础语法区分输入与输出注释文本列表if 语句for 语句range() 函数走向编程的第一个例子Part 2 函数 和 数据结构函数数据结构del 语句列表详解元组集合字典循环的技巧Part 3 输入与输出读写文件打开文件 open()读文件写文件...
HTML+CSS画一个卡通中秋月饼
HTMLCSS画一个卡通中秋月饼🥮🥮🥮 中秋活动水个文章 整个divcss实现个月饼,给前端初学者一个练手的demo 效果图 思路 HTMl 先来个轮廓画脸上的东西:眼睛、眉毛、腮红、嘴巴眼睛丰富下瞳孔画20个花瓣 CSS 轮廓是要外…...
echarts的折线图,在点击图例后,提示出现变化,不报错。tooltip的formatter怎么写
在点击图例的年后,提示框会相应的变化,多选和单选都会响应变化。tooptip的重度在formatter tooltip:{show:true,trigger:"axis",alwaysShowContent:true,triggerOn:"mousemove",textStyle:{color:"#fff"},backgroundColor…...
C++中的auto是一个关键字,用于在编译时自动推导变量的类型
C中的auto是一个关键字,用于在编译时自动推导变量的类型。通过使用auto关键字,编译器可以根据变量的初始化表达式来确定其类型,从而省略了显式地指定类型的步骤。 使用auto关键字声明的变量必须在定义时进行初始化,以便编译器可以…...
VUE build:gulp打包:测试、正式环境
目录 项目结构 Gulp VUE使用Gulp Vue安装Gulp Vue定义Gulp.js package.json build文件夹 config文件夹 static-config文件夹 项目结构 Gulp Gulp是一个自动化构建工具,可以帮助前端开发者通过自动化任务来管理工作流程。Gulp使用Node.js的代码编写ÿ…...
1.使用turtle换一个五环2.设计这样一个程序:输入一个数字 判断它是不是一个质数
1.使用turtle换一个五环 import turtle turtle.pensize(15) turtle.penup() turtle.color(blue) turtle.goto(-150,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtle.color(black) turtle.goto(0,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtl…...
C语言希尔排序
希尔排序(Shell Sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由…...
KubeSphere 在互联网医疗行业的应用实践
作者:宇轩辞白,运维研发工程师,目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。 前言 2020 年我国互联网医疗企业迎来了“爆发元年”,越来越多居民在家隔离期间不方便去医院看诊,只好采取在线诊疗的手…...
物联网:用python调入机器学习分析物联网数据入侵检测模块
要使用Python调用机器学习分析物联网数据入侵检测模块,您需要以下步骤: 安装Python和相关的机器学习库,如scikit-learn、pandas、numpy等。您可以使用pip命令来安装这些库。 准备输入数据。这些数据可以是来自物联网设备的原始数据ÿ…...
使用scss简化媒体查询
在进行媒体查询的编写的时候,我们可以利用scss与与编译器,通过include混入的方式对代码进行简化,从而大大提高了代码的可维护性,也减少了代码的编写量,废话不多说,直接上代码: // 断点列表 相当…...
win部署CRM
win部署crm) 1.phpstudy2.composer3.代码4.其他配置 周末锴哥让我帮他部署了一个CRM,写个教程,方便之后他用。锴哥用的是 NxCrm,先把代码下下来。 1.phpstudy 1.首先是下载小皮面板,配置php的环境。这里面下载了php8…...
Linux命令200例:dip用于用户与远程主机建立通信连接
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师࿰…...
【每日一题】981. 基于时间的键值存储
981. 基于时间的键值存储 - 力扣(LeetCode) 设计一个基于时间的键值数据结构,该结构可以在不同时间戳存储对应同一个键的多个值,并针对特定时间戳检索键对应的值。 实现 TimeMap 类: TimeMap() 初始化数据结构对象void…...
IMU姿态解算,从IMU数据中计算旋转、速度、位置,IMU测量的原理
0. 预备 a. IMU测量值解释 IMU在测量时,得到的角速度或者加速度均是相对于地心惯性系结果,并且将该结果表示到Body坐标系下,就形成了最终的IMU输出。 记作: ω i b b \omega_{ib}^b ωibb,表示body系相对于惯性系的…...
【Qt-17】Qt调用matlab生成的dll库
matlab生成dll库 1、matlab示例代码 function BDCube(x,y)[x,y,z] cylinder(x,y);t1 hgtransform;s1 surf(3*x,3*y,4*z,Parent,t1);grid onview(3)shading interp end 2、matlab环境配置 首先检查自己的mcc编译器是否可用,输出以下命令: &#x…...
css经典面试题(二)
文章目录 1、清除浮动2、opacity: 0、visibility: hidden、display: none 的区别3、css画一个三角形4、常见的主流浏览器前缀5、重绘与重排的区别?6、如何优化图片7、CSS3 中 transition 和 animation 的属性分别有哪些8、居中为什么要使用 transform(为…...
jira搜索search issue条目rest实用脚本
官方文档链接地址: The Jira Cloud platform REST API 实用json请求脚本如下: {"fields": ["summary","status"],"jql": "project abc AND summary ~ 【%s】【coverity】 AND componentCoverity"…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
