如何用Python统计CSDN质量分
文章目录
- CSDN质量分查询
- selenium
- 爬取博客地址
- 单篇测试
- 批量查询
- 分析
CSDN质量分查询
CSDN对博客有一套分数评价标准,其查询入口在这里:质量分查询,效果大致如下
如果质量分太低,就会在博文的标题下面出现黄底黄字:
这个提示其实已经很客气了,我记得去年刚上线的时候写的是低质量博客,总之很有攻击性。
但是,这个评分标准毕竟不是一早就有的,所以早些年间写的博客不可能完全符合现在的CSDN的要求,为了找到需要改进质量的博客,可以通过爬虫的方式,逐一对博客质量进行检测。
selenium
考虑到查询需要有一个交互过程,所以这里采用selenium作为爬虫工具。如果没装的话,需要安装一下
pip install selenium
然后需要下载webdriver,各浏览器下载地址如下
Edge | Chrome | Firefox | IEx |
---|---|---|---|
Webdriver | geckodriver | chromedriver | IEDriverServer |
下载之后解压,并将解压地址添加到环境变量,就可以顺利调用了。
爬取博客地址
首先第一步是获取所有需要查询的博客的地址,这一步并不需要用到selenium,urllib可以轻松搞定,这一步如果有疑问可以参考这篇:用Python标准库统计CSDN阅读量
import urllib.request as ur
import re
article = r'details/[0-9]*'
blogId = []
for i in range(1, 25):print(i)url = f'https://tinycool.blog.csdn.net/article/list/{i}'res = ur.urlopen(url)text = res.read().decode('utf-8')details = re.findall(article, text)blogId += [int(d.split('/')[-1]) for d in details]if len(details)==61:breakblogId = list(set(blogId))
网址https://tinycool.blog.csdn.net/article/list/是个人主页,好处是可以指定页码。但网页中除了博客栏之外,其他地方也会出现博客地址,从而导致最终得到的网址会重复,故而最后通过set去重。
单篇测试
在批量查询之前,先来测试一下单篇博客查询是否可行
from selenium import webdriver
from selenium.webdriver.common.by import Byinput_xpath = '/html/body/div[2]/div/div/div/div/div/div/div[1]/div/div/div[2]/div[1]/div[1]/input'
btn_xpath = '/html/body/div[2]/div/div/div/div/div/div/div[1]/div/div/div[2]/div[2]'
code_xpath = '/html/body/div[2]/div/div/div/div/div/div/div[1]/div/div[2]/p[1]'url = 'https://tinycool.blog.csdn.net/article/details/111595416'driver = webdriver.Edge()
driver.get("https://www.csdn.net/qc?utm_source=1966961068")
driver.find_element(By.XPATH, input_xpath).send_keys(url)
driver.find_element(By.XPATH, btn_xpath).click()
code = driver.find_element(By.XPATH, code_xpath).text
# 得到code=99
批量查询
单篇博客查询没问题,那么批量无非是外面套一个循环而已
import time
blogCode = []
def getOneCode(path):driver.find_element(By.XPATH, input_xpath).clear()driver.find_element(By.XPATH, input_xpath).send_keys(path)driver.find_element(By.XPATH, btn_xpath).click()time.sleep(0.5) # 给一个延时,否则点击未必会响应code = driver.find_element(By.XPATH, code_xpath).textreturn int(code)for id in blogId:path = f"https://tinycool.blog.csdn.net/article/details/{id}"try:blogCode.append([id, getOneCode(path)])except:blogCode.append([id, -1]) print(blogCode[-1])
效果如下
分析
没统计之前其实没意识到,统计之后发现一共有14篇博客得到了99分,超过60分的博客数目分别如下
c99 = [bc for bc in blogCode if bc[1] == 99]
print(len(c99))
# 14
from pprint import pprint
## 下面是99分的博客id
[[103475445, 99],[103465319, 99],[100534775, 99],[103439486, 99],[103398694, 99],[103769447, 99],[103519671, 99],[103669180, 99],[103568966, 99],[103964310, 99],[100175523, 99],[97750903, 99],[111595416, 99],[103847843, 99]]
- Julia数值微积分
- Julia实现数值代数中的经典算法
- F#语言快速教程
- C语言实现八种排序算法
- Julia实现经典的插值算法
- C++面向对象入门这一篇就够了
- C语言实现链表、堆栈和队列
- C语言实现高级数据结构之B树
- 确定不收藏一下吗?你想要的语言环境这里都有
- Clojure极简教程
- python实现光线追迹(中):空间关系
- 用C语言写一个计算器
- go语言实现图的广度优先与深度优先搜索
相关文章:

如何用Python统计CSDN质量分
文章目录 CSDN质量分查询selenium爬取博客地址单篇测试批量查询分析 CSDN质量分查询 CSDN对博客有一套分数评价标准,其查询入口在这里:质量分查询,效果大致如下 如果质量分太低,就会在博文的标题下面出现黄底黄字: 这…...

gin框架内容(三)--中间件
gin框架内容(三)--中间件 Gin框架允许开发者在处理请求的过程中,加入用户自己的函数。这个函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等 即比如&#x…...

如何在工作中利用Prompt高效使用ChatGPT
导读 AI 不是来替代你的,是来帮助你更好工作。用better prompt使用chatgpt,替换搜索引擎,让你了解如何在工作中利用Prompt高效使用ChatGPT。 01背景 现在 GPT 已经开启了人工智能狂潮,不过是IT圈,还是金融圈。 一开…...

uniapp-小程序button分享传参,当好友通过分享点开该页面时,进行一些判断……
一、需求描述: 该小程序中,点击圈子列表页面—>进入圈子详情页面,在圈子详情页面点击button分享按钮后,发送给好友。当好友通过分享点开该页面时: 1.先判断是否登录,如果没有,先去登录&#…...

Ceph部署方法介绍
Ceph部署方法介绍 Installing Ceph — Ceph Documentation Ceph环境规划 admin是一个部署节点...

GoogleLeNet V2 V3 —— Batch Normalization
文章目录 Batch Normalizationinternal covariate shift激活层的作用BN执行的位置数据白化网络中的BN层训练过程 BN的实验效果MNIST与GoogleLeNet V1比较 GoogleLeNet出来之后,Google在这个基础上又演进了几个版本,一般来说是说有4个版本,之前…...

Mac 系统钥匙串证书不受信任
Mac 系统钥匙串证书不受信任 解决办法 通过尝试安装 Apple PKI 的 Worldwide Developer Relations - G4 (Expiring 12/10/2030 00:00:00 UTC) 解决该异常问题 以上便是此次分享的全部内容,希望能对大家有所帮助!...

一个企业级的文件上传组件应该是什么样的
目录 1.最简单的文件上传 2.拖拽粘贴样式优化 3.断点续传秒传进度条 文件切片 计算hash 断点续传秒传(前端) 断点续传秒传(后端) 进度条 4.抽样hash和webWorker 抽样hash(md5) webWorker 时间切片 5.文件类型判断 通过文件头判断文件类型 6.异步并发数控制(重要…...

安全渗透重点内容
this是js中的一个关键字,在不同的场合使用,this的值会发生变化,下面我将详细的介绍this在函数中的各种指向。 在方法中,this表示该方法所属的对象。 如果单独使用,this表示全局对象。 在函数中,this表示全…...

【触觉智能Purple Pi OH开发板体验】开箱体验:开源主板Purple Pi RK3566 上手指北
前言 前段时间收到来自【电子发烧友】的一款开发板,名叫:PurplePi,216G售价仅249元。它使用的芯片是rk3566,适配的OpenHarmony版本为3.2 Release 是目前最便宜的OpenHarmony标准系统开源开发板,并且软硬件全部开源&am…...

flink1.16使用消费/生产kafka之DataStream
flink高级版本后,消费kafka数据一种是Datastream 一种之tableApi。 上官网 Kafka | Apache Flink Kafka Source 引入依赖 flink和kafka的连接器,里面内置了kafka-client <dependency><groupId>org.apache.flink</groupId><arti…...

【多任务编程-线程通信】
进程/线程通信的方式 某些应用程序中,进程/进程和线程/线程之间不可避免的进行通信,进行消息传递,数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…...

K8S暴露pod内多个端口
K8S暴露pod内多个端口 一、背景 公司统一用的某个底包跑jar服务,只暴露了8080端口 二、需求 由于有些服务在启动jar服务后,会启动多个端口,除了8080端口,还有别的端口需要暴露,我这里就还需要暴露9999端口。 注&a…...

Python 列表
""" #list函数 ls list() #创建一个空列表 print(list()) print(list(str(1234)))#[1, 2, 3, 4] print(list(range(5)))#[0, 1, 2, 3, 4] print(list((1,2,3,4)))#[1, 2, 3, 4] print(list(Lift is short, you need python))#注意空格也算一个字符 #[L, i, f,…...

Rabbitmq的安装与使用(Linux版)
目录 Rabbitmq安装 1.在Ubuntu上安装RabbitMQ: 打开终端,运行以下命令以更新软件包列表: 安装RabbitMQ: 安装完成后,RabbitMQ服务会自动启动。你可以使用以下命令来检查RabbitMQ服务状态: 2.在CentOS…...

Kubernetes对象深入学习之四:对象属性编码实战
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习》系列的第四篇,前面咱们读源码和文档,从理论上学习了kubernetes的对象相关的知识ÿ…...

深度学习入门教程(2):使用预训练模型来文字生成图片TextToImageGenerationWithNetwork
本深度学习入门教程是在polyu HPCStudio 启发以及资源支持下进行的,在此也感谢polyu以及提供支持的老师。 本文内容:在GoogleColab平台上使用预训练模型来文字生成图片Text To Image Generation With Network (1)你会学到什么&a…...

ORA-38760: This database instance failed to turn on flashback database
早晨接一个任务,使用rman备份在虚拟化单机上恢复实例,恢复参数文件、控制文件和数据文件都正常,recover归档时报错如下: Starting recover at 2023-07-28 10:25:01 using channel ORA_DISK_1 starting media recovery media reco…...

避免低级错误:深入解析Java的ConcurrentModificationException异常
在软件开发中,我们常常会遇到各种错误和异常。其中有一类比较低级但又常见的错误就是ConcurrentModificationException异常。最近了我就写了个这种异常,这个异常通常发生在使用迭代器遍历集合时,同时对集合进行修改,从而导致迭代器…...

7.28
1.思维导图 2.qt的sever #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList> …...

java线程中的常见方法(详解)
方法简介 方法名 功能 说明 start() 启动一个新线程,在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如…...

线程池参数配置
上次面试被人问到,如果是IO 密集型的任务,该如何配置合适的线程数,当初我说要按照IO具体的请求毫秒时间,来配置具体的线程数。 NthreadsNcpu*(1w/c) 公式中 W/C 为系统 阻塞率 w:等待时间 c:计算时间一般情况下,如果存…...

Spread for Winform 16.2.20231.0 (SP2) Crack
Spread for Winform 16.2.20231.0 (SP2)发布。此版本包含针对客户报告的问题的重要修复: 安装版本 16 后,FarPoint.Localization.dll 将丢失。 将数据绑定到 Spread 时会出现 InvalidOperationException。 通过 Spread Designer 设置的上标将不会保留。…...

Go程序结构
Go程序结构 1、名称 名称的开头是一个字母或下划线,且区分大小写。 实体第一个字母的大小写决定其可见性是否跨包: 若名称以大写字母开头,它是导出的,对包外是可见和可访问的,可以被自己包以外的其他程序所引用…...

JAVA面试总结-Redis篇章(四)——双写一致性
JAVA面试总结-Redis篇章(四)——双写一致性 问:redis 做为缓存,mysql的数据如何与redis进行同步呢?第一种情况,如果你的项目一致性要求高的话 采用以下逻辑我们应该先删除缓存,再修改数据库&…...

赋能医院数字化转型,医院拍摄VR全景很有必要
医院有没有必要拍摄制作VR全景呢?近期也有合作商问我们这个问题,其实VR智慧医院是趋势、也是机遇。现在外面很多的口腔医院、医美机构等都开始引入VR全景技术了,力求打造沉浸式、交互式的VR智慧医院新体验,通过VR全景展示技术来助…...

Vue3项目中没有配置 TypeScript 支持,使用 TypeScript 语法
1.安装 TypeScript:首先,需要在项目中安装 TypeScript。在终端中运行以下命令 npm install typescript --save-dev2.创建 TypeScript 文件:在 Vue 3 项目中,可以创建一个以 .ts 后缀的文件,例如 MyComponent.ts。在这…...

数据可视化大屏拼接屏开发实录:屏幕分辨率测试工具
一、可视化大屏开发 在数据可视化大屏开发时,确定数据可视化大屏拼接屏的板块尺寸需要考虑以下几个因素: 屏幕分辨率:首先需要知道每个板块屏幕的分辨率,包括宽度和高度,这决定了每个板块上可以显示的像素数量。 数据…...

每日一题7.28 209
209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 本题应该是用前缀…...

Python + Playwright 无头浏览器Chrome找不到元素
用Python Playwright调试时,发现不用无头浏览器(即headlessFalse)代码能够运行成功,但是一用无头浏览器时(即headlessTrue)就会报错,提示找不到元素。换成Firefox浏览器又不会有这个问题&#…...