2. 获取自己CSDN文章列表并按质量分由小到大排序(文章质量分、博客质量分、博文质量分)(阿里云API认证)

文章目录

    • 写在前面
    • 步骤
      • 打开CSDN质量分页面
      • 粘贴查询文章url
      • 按F12打开调试工具,点击Network,点击清空按钮
      • 点击查询
      • 是调了这个接口`https://bizapi.csdn.net/trends/api/v1/get-article-score`
      • 用postman测试调用这个接口(不行,认证不通过)
      • 我查了一下,这种认证方式貌似是阿里云的API认证
      • 这里有一篇巨好的参考文章
      • 参考上面参考文章中的获取质量分java代码部分,用python代码实现获取博文质量分(可以成功查询)
      • 读取我们上一篇文章中的博客列表articles.json,逐个获取质量分,最后把结果保存到processed_articles.json★★★
      • 编写代码处理processed_articles.json,提取原创文章,根据url去重,并按质量分由小到大排序,生成original_sorted_articles.json★★★
      • 编写代码统计original_sorted_articles.json中原创文章数量,计算平均质量分★★★

上一篇:1. 如何爬取自己的CSDN博客文章列表(获取列表)(博客列表)(手动+python代码方式)

写在前面

上一篇文章中,我们已经成功获取到了自己的CSDN已发布博文列表:

(articles.json)

在这里插入图片描述

本篇文章将实现获取每篇原创文章的质量分,并由小到大排序。

步骤

打开CSDN质量分页面

https://www.csdn.net/qc?utm_source=1966961068

粘贴查询文章url

在这里插入图片描述

按F12打开调试工具,点击Network,点击清空按钮

在这里插入图片描述

点击查询

在这里插入图片描述

是调了这个接口https://bizapi.csdn.net/trends/api/v1/get-article-score

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用postman测试调用这个接口(不行,认证不通过)

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

{"url": "https: //dontla.blog.csdn.net/article/details/132227398"
}

在这里插入图片描述
提示:

{"message": "X-Ca-Key is not exist"
}

然后我把X-Ca-Key从浏览器复制下来,给它加到Headers参数里了:

在这里插入图片描述
然后它又提示什么:

{"message": "X-Ca-Signature not exist"
}

在这里插入图片描述

然后我故技重施,把那些提示缺少的东西统统从浏览器复制下来给它加上:

在这里插入图片描述

但是最后提示:

{"message": "HMAC signature does not match"
}

这有点尴尬啊。。。

我查了一下,这种认证方式貌似是阿里云的API认证

有亿点复杂,一时半会搞不懂

这里有一篇巨好的参考文章

如何批量查询自己的CSDN博客质量分

参考上面参考文章中的获取质量分java代码部分,用python代码实现获取博文质量分(可以成功查询)

就是这一段:

// //循环调用csdn接口查询所有的博客质量分
String urlScore = “https://bizapi.csdn.net/trends/api/v1/get-article-score”;
//
//请求头
HttpHeaders headers = new HttpHeaders();
headers.set(“accept”,“application/json, text/plain, /”);
headers.set(“x-ca-key”,“203930474”);
headers.set(“x-ca-nonce”,“22cd11a0-760a-45c1-8089-14e53123a852”);
headers.set(“x-ca-signature”,“RaEczPkQ22Ep/k9/AI737gCtn8qX67CV/uGdhQiPIdQ=”);
headers.set(“x-ca-signature-headers”,“x-ca-key,x-ca-nonce”);
headers.set(“x-ca-signed-content-type”,“multipart/form-data”);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
//调用接口获取数据
List scoreModels = new ArrayList<>();
for (String bkUrl : urlList) {
MultiValueMap<String,String> requestBody = new LinkedMultiValueMap<>();
requestBody.put(“url”, Collections.singletonList(bkUrl));
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
URI uri = URI.create(urlScore);
ResponseEntity responseEntity = restTemplate.postForEntity(uri, requestEntity, String.class);
JSONObject data1 = JSON.parseObject(responseEntity.getBody(),JSONObject.class) ;
ScoreModel scoreModel = JSONObject.parseObject(data1.get(“data”).toString(),ScoreModel.class);
scoreModels.add(scoreModel);
System.out.println("名称: "+scoreModel.getTitle() +"分数: " + scoreModel.getScore() +"时间: " + scoreModel.getPost_time());
}
return scoreModels;
}

传入参数为urlList:

import requests
from requests.models import PreparedRequestdef get_score_models(url_list):url_score = "https://bizapi.csdn.net/trends/api/v1/get-article-score"headers = {"accept": "application/json, text/plain, */*","x-ca-key": "203930474","x-ca-nonce": "22cd11a0-760a-45c1-8089-14e53123a852","x-ca-signature": "RaEczPkQ22Ep/k9/AI737gCtn8qX67CV/uGdhQiPIdQ=","x-ca-signature-headers": "x-ca-key,x-ca-nonce","x-ca-signed-content-type": "multipart/form-data"}score_models = []for bk_url in url_list:data = {"url": [bk_url]}response = send_request(url_score, data, headers)data1 = response.json()print(data1)'''{'code': 200, 'message': 'success', 'data': {'article_id': '132240693', 'score': 95, 'message': '文章质量良好', 'post_time': '2023-08-12 17: 45: 24'}}        '''score_model = data1["data"]score_models.append(score_model)print(f'文章Id:{score_model["article_id"]}\n分数:{score_model["score"]}\n文章质量:{score_model["message"]}\n发布时间:{score_model["post_time"]}')return score_modelsdef send_request(url, data, headers):session = requests.Session()prepared_request = PreparedRequest()prepared_request.prepare(method='POST', url=url,headers=headers, data=data)return session.send(prepared_request)# 示例调用
urlList = ["https://dontla.blog.csdn.net/article/details/132240693"]
scoreModels = get_score_models(urlList)

上面的验证信息,我从那篇博客里搞来的,怎么生成的,我就搞不清楚了。。。

运行上面代码,能成功得到质量分信息:

在这里插入图片描述

读取我们上一篇文章中的博客列表articles.json,逐个获取质量分,最后把结果保存到processed_articles.json★★★

我们上一篇文章得到的articles.json是这样的:

在这里插入图片描述

下面代码将读取它并逐个获取质量分:

(getArticleScore.py)

import requests
from requests.models import PreparedRequest
import jsondef get_score_models(url):url_score = "https://bizapi.csdn.net/trends/api/v1/get-article-score"headers = {"accept": "application/json, text/plain, */*","x-ca-key": "203930474","x-ca-nonce": "22cd11a0-760a-45c1-8089-14e53123a852","x-ca-signature": "RaEczPkQ22Ep/k9/AI737gCtn8qX67CV/uGdhQiPIdQ=","x-ca-signature-headers": "x-ca-key,x-ca-nonce","x-ca-signed-content-type": "multipart/form-data"}data = {"url": url}response = send_request(url_score, data, headers)data1 = response.json()# print(data1)'''{'code': 200, 'message': 'success', 'data': {'article_id': '132240693', 'score': 95, 'message': '文章质量良好', 'post_time': '2023-08-12 17: 45: 24'}}        '''score_model = data1["data"]return score_modeldef send_request(url, data, headers):session = requests.Session()prepared_request = PreparedRequest()prepared_request.prepare(method='POST', url=url,headers=headers, data=data)return session.send(prepared_request)def process_article_json():# 读取articles.json文件with open('articles.json', 'r') as f:articles = json.load(f)# 遍历每个元素并处理for article in articles:score_model = get_score_models(article['article_url'])article['article_score'] = score_model['score']print(article)# 保存处理后的结果到新的JSON文件output_file = 'processed_articles.json'with open(output_file, 'w') as f:json.dump(articles, f, ensure_ascii=False, indent=4)if __name__ == '__main__':process_article_json()

在这里插入图片描述

最终得到processed_articles.json:

在这里插入图片描述
在这里插入图片描述

编写代码处理processed_articles.json,提取原创文章,根据url去重,并按质量分由小到大排序,生成original_sorted_articles.json★★★

(getOriginalSort.py)

import json# 读取JSON文件
with open('processed_articles.json', 'r') as f:data = json.load(f)# 过滤和排序数据,并去除重复的元素
filtered_data = []
seen_urls = set()
for article in data:if article['article_type'] == '原创' and article['article_url'] not in seen_urls:filtered_data.append(article)seen_urls.add(article['article_url'])sorted_data = sorted(filtered_data, key=lambda x: x['article_score'])# 保存到新的JSON文件
with open('original_sorted_articles.json', 'w') as f:json.dump(sorted_data, f, indent=4, ensure_ascii=False)

执行:

python3 getOriginalSort.py

生成文件original_sorted_articles.json

在这里插入图片描述

不看不知道,一看吓一跳啊,居然这么多一分的。。。心塞

在这里插入图片描述

编写代码统计original_sorted_articles.json中原创文章数量,计算平均质量分★★★

(getAverageScore.py)

import json# 读取 JSON 文件
with open('original_sorted_articles.json', 'r') as file:articles = json.load(file)# 统计 article_score 并计算平均值
total_score = 0
num_articles = len(articles)
for article in articles:total_score += article['article_score']
average_score = total_score / num_articles# 打印结果
print(f"元素数量:{num_articles}")
print(f"平均 article_score:{average_score}")# 保存结果到文本文件
with open('average_score_result.txt', 'w') as file:file.write(f"元素数量:{num_articles}\n")file.write(f"平均 article_score:{average_score}\n")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我去,这也太低了吧,客服咋给我算出60几分的,难道只统计最近一两年的?

唉,反正慢慢改吧。。。😔

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

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

相关文章

elementui实现当前页全选+所有全选+翻页保持选中状

原文来自&#xff1a;https://blog.csdn.net/sumimg/article/details/121693305?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121693305-blog-127570059.235%5Ev38%5Epc_relevant_anti_t3&depth_1-utm…

Linux —— 文件系统

目录 一&#xff0c;背景 二&#xff0c;文件系统 一&#xff0c;磁盘简介 磁盘分为SSD、机械磁盘&#xff1b;机械磁盘&#xff0c;即磁盘高速转动&#xff0c;磁头移动到读写扇区所在磁道&#xff0c;让磁头在目标扇区上划过&#xff0c;即可完成对扇区的读写操作&#xff…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本&#xff1a; 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本&#xff0c;开启鉴权 1.在application.properties配置文件开启鉴权&…

thinkphp:分组查询(多条相同列的数据只展示一条)

例子&#xff1a;数据库中有trans_num、subinventory_from、transaction_type、creation_date有相同值&#xff0c;在查询该数据库使&#xff0c;只展示这几个值相同的一条 效果&#xff1a; 限制之前 限制之后 代码 限制前&#xff0c;后端代码 public function select_i…

Java之继承

继承 继承为什么使用继承继承是什么继承的语法访问父类成员访问父类成员变量访问父类成员方法 super关键字子类构造方法super和this异同分别的使用方法 继承的方式final关键字 作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等…

微服务监控技术skywalking的部署与使用(亲测无坑)

微服务监控技术skywalking的部署与使用 1. 前期准备2. skywalking安装部署2.1 Java Agent2.2 apache/skywalking-oap-server2.3 apache/skywalking-ui 3. 项目启动4.效果展示 1. 前期准备 注&#xff1a;本篇文章采用docker部署&#xff0c;采用8.2.0版本&#xff0c;版本一定…

机器学习、深度学习项目开发业务数据场景梳理汇总记录三

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 这里是续文&#xff0c;因为CSDN单篇文章内容太大的话就会崩溃的&#xff0c;别问我怎么知道的&#xff0c;问就是血泪教训&#xff0c;辛辛苦苦写了一…

C语言 ——指针数组与数组指针

目录 一、二维数组 二、指针数组 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;书写方式 &#xff08;3&#xff09;指针数组模拟二维数组 三、数组指针 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;使用数组指针打印一维数组 &#xff08;3&a…

2023牛客暑期多校训练营7

Beautiful Sequence 贪心&#xff0c;二进制&#xff0c;构造 Cyperation 模拟 &#xff0c;数学 We Love Strings 分块&#xff0c;二进制枚举&#xff0c;二进制容斥dp Writing Books 签到 根据相邻两个异或值B&#xff0c;因为前小于等于后&#xff0c;故从高到低遍历B的每一…

AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

说一下功能&#xff1a;客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信&#xff0c;从此老死不相往来 看代码&#xff1a; //发送端…

C语言 ——函数指针变量

1、概念&#xff1a; 数组指针 - 是指针-是指向数组的指针&#xff0c;是存放数组地址的指针 函数指针 - 是指针 是指向函数的指针 - 是存放函数地址的指针!! 如上所示&#xff0c;函数也是具有地址的&#xff0c;而存放函数地址的指针变量成为函数指针变量。 而有如上所示&a…

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息&#xff0c;并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…

【Kafka】1.Kafka简介及安装

目 录 1. Kafka的简介1.1 使用场景1.2 基本概念 2. Kafka的安装2.1 下载Kafka的压缩包2.2 解压Kafka的压缩包2.3 启动Kafka服务 1. Kafka的简介 Kafka 是一个分布式、支持分区&#xff08;partition&#xff09;、多副本&#xff08;replica&#xff09;、基于 zookeeper 协调…

Qt5开发视频播放器

一、播放器界面UI设计 控件对象名位置&#xff08;坐标点&#xff09;对象名称组件名称备注Widget(0, 0, 809, 572)WidgetQWidgetlabellabelQLabel播放窗口label_2label_2QLabelvoice_controlvoice_controlQSlider音量滑动条btn_openbtn_openQPushButton打开文件按钮label_4la…

ThreadLLocal的学习

ThreadLocal的学习 ThreadLocal的学习1.ThreadLocal是什么&#xff1f;2.ThreadLocal的数据结构Java的四种引用类型 3.ThreadLocal为什么会出现内存泄露&#xff1f;既然会出现内存泄露为什么Entry的key还要使用弱引用&#xff1f;如何避免内存泄露&#xff1f; ThreadLocal的学…

最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架

最新版本的2023UI千月影视APP源码是一款开源的完美版应用程序&#xff0c;具备前后端完美匹配的特点。该应用的后端开发基于ThinkPHP框架&#xff0c;这是一个广泛使用的PHP开发框架&#xff0c;具有稳定性和安全性方面的优势。 2023UI千月影视APP是一款提供电影、电视剧、综艺…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库&#xff0c;在项目中也进行了一些实践&#xff0c;但一直都没有一些技术文章的沉淀&#xff0c;近期打算做个系列&#xff0c;通过一些具体的场景将Clickhouse的用法进行沉淀和分享&#xff0c;供大家参考。 首先我们假设一个Clickhouse数…

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞&#xff0c;通过fallback()或者receive()函数进行函数递归进行持续取钱。 刚才试了一下可以递归10次&#xff0c;貌似就结束了(version: 0.8.20)。 直接看代码: 银行合约&#xff1a;有存钱、取钱、查看账户余额等函数。攻击合约:…

第04天 Spring是如何解决循环依赖的

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

【VUE】7、VUE项目中集成watermark实现页面添加水印

在网站浏览中&#xff0c;常常需要网页水印&#xff0c;以便防止用户截图或录屏暴露敏感信息后&#xff0c;方便追踪用户来源。 1、安装 watermark 在 package.json 文件 dependencies 节点增加 watermark-dom 依赖 "watermark-dom": "2.3.0"然后执行命…