【python爬虫应用03】csdn个人所有文章质量分查询

🛠️ 环境准备

在开始编写代码之前,我们需要进行一些环境准备。以下是所需的环境和库:

  • 操作系统:Windows
  • 编程语言:Python 3
  • 编辑器:VSCode(可选)

安装所需的库:

  • requests:用于发送HTTP请求
  • MultipartEncoder:用于构造POST请求的请求体

可以使用以下命令在命令行中安装这些库:

pip install requests
pip install requests_toolbelt

请确保已经正确安装了Python 3,并且在编写代码之前设置了Python 3的环境变量。

🎯 分析目标数据

在进行爬取之前,首先需要打开目标网页并使用浏览器的开发者工具,以获取所需的请求 URL 和请求标头。

第一步:打开目标网页

在这里插入图片描述

第二步:使用开发者工具

按下键盘上的F12键,打开浏览器的开发者工具。然后点击"Network"选项卡,这将显示浏览器发送的网络请求。

在这里插入图片描述

第三步:获取请求 URL 和请求标头

在开发者工具中,可以看到所有的网络请求。找到目标请求,并点击查看其详情。

在请求详情中,我们可以找到标头,查看请求的URL和请求标头。这些信息将在后续的代码编写中使用。

请求url

点击负载找到请求参数

参数列表

第四步:分析请求url,构造参数字典

根据以上信息可以得到,请求url是由两部分构成,

url = "https://blog.csdn.net/community/home-api/v1/get-business-list"
参数:
page: 2
size: 20
businessType: lately
noMore: false
username: mingfeng4923

🐍 获取所有文章代码编写

⭐️ 获取单页的文章列表

✅首先,需要导入所需的库:

import requests
from requests_toolbelt import MultipartEncoder

✅接下来,将发送GET请求并获取数据内容:

url = 'urls = "https://blog.csdn.net/community/home-api/v1/get-business-list"'
# 使用了常见的浏览器User-Agent来模拟浏览器请求
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
    }
    lb_params = {
        "page": 1,
        "size": "20",
        "businessType": "blog",
        "orderby": "",
        "noMore": "false",
        "year": "",
        "month": "",
        "username": "mingfeng4923",
    }

res = requests.get(url=urls, headers=headers, params=lb_params)

✅使用json方法处理数据,并读取文章列表信息,文章信息在data>list下

在这里插入图片描述

data_list = res.json()["data"]["list"]

✅遍历列表输出文章链接和文章标题

for data in data_list:
    print(data["url"],data["title"])

✅结果:
在这里插入图片描述

⭐️ 获取所有页的文章

修改页码,循环发送GET请求获取文章列表信息,直到返回的列表为空停止循环。

要获取所有文章信息,我们需要对请求的URL进行修改。URL中的参数page代表当前页码,我们可以通过修改该参数的值来获取不同页的文章列表。

🫸 首先,我们定义一个函数get_post_list_urls,该函数用于发送GET请求获取文章列表信息。

def get_post_list_urls(page, username):
    # 构造请求URL和请求参数
    url = "https://blog.csdn.net/community/home-api/v1/get-business-list"
    params = {
        "page": page,
        "size": "20",
        "businessType": "blog",
        "orderby": "",
        "noMore": "false",
        "year": "",
        "month": "",
        "username": username,
    }
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
    }

    try:
        # 发送GET请求
        response = requests.get(url=url, headers=headers, params=params)
        # 解析响应数据
        data_list = response.json()["data"]["list"]
        return data_list
    except Exception as e:
        print(f"获取文章列表失败:{e}")
        return []

🫸 然后,我们可以使用该函数来获取所有文章的信息。

res = []  # 存储所有文章信息的列表
page = 1  # 初始页码

# 循环获取文章列表信息
while True:
    data_list = get_post_list_urls(page, UserName)
    page += 1
    if data_list:
        res.extend(data_list)
    else:
        break

输出查看一下结果

# 遍历输出文章链接和标题
COUNT = len(res)
for data in res:
    print(data["url"],data["title"])
print(f"[+] [{COUNT}篇]")

在这里插入图片描述

📑 CSDN质量分查询

接下来是对博文质量分数的查询。首先打开目标网页并使用浏览器的开发者工具。然后复制粘贴要查询的文章链接,点击查询按钮。在开发者工具中查看请求的请求 URL 和请求标头,注意这次要用POST方法进行请求。构造查询函数,使用requests库发送POST请求获取博文的质量分数。

要查询博文的质量分数,我们需要先打开目标网页并使用浏览器的开发者工具,以查看请求的URL和请求标头。

第一步:打开目标网页

在浏览器中打开目标网页。

目标链接:https://www.csdn.net/qc
在这里插入图片描述

第二步:使用开发者工具

按下键盘上的F12键,打开浏览器的开发者工具。然后复制要查询的文章链接,点击查询。

在这里插入图片描述

在开发者工具中就可以查询到文章的信息。

在这里插入图片描述

第三步:获取请求 URL 和请求标头

在开发者工具中,可以看到所有的网络请求。找到目标请求,并点击查看其详情。

在请求详情中,我们可以找到标头,查看请求的URL和请求标头。这些信息将在后续的代码编写中使用。

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

根据以上信息可以得到,请求url和参数信息,使用的是post方法

请求url : https://bizapi.csdn.net/trends/api/v1/get-article-score
参数:url: https://blog.csdn.net/mingfeng4923/article/details/131423637

第四步:构造查询函数

在Python中,我们可以定义一个函数get_quality_score,用于发送POST请求获取博文的质量分数。

def get_quality_score(article_url):
    # 构造请求URL和请求体
    url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"
    params = {"url":article_url}
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
        "Content-Type": "application/json",
    }

    try:
        # 发送POST请求
        response = requests.post(url=url, headers=headers,  params=params, timeout=10,)
        # 解析响应数据
        score = response.json()["data"]["score"]
        return score
    except Exception as e:
        print(f"获取质量分数失败:{e}")
        return None

报错401解决方法

这样直接访问就会出错,status_code 结果是401

在这里插入图片描述

这里需要使用requests_toolbelt库中的MultipartEncoder方法:

from requests_toolbelt import MultipartEncoder
...
params = MultipartEncoder({"url": article_url})
headers['Content-Type'] = params.content_type # 修改Content-Type
res = requests.post(
            url,
            headers=headers,
            data=params,  # 使用data
            timeout=10,
        )

在这里插入图片描述

status_code返回200,正常访问

返回数据:

code: 200
data: {
		article_id: "131423637"
		message: "文章质量良好"
		nickname: "mingfeng4923"
		post_time: "2023-06-27 19:15:12"
		score: 92
		title: "Python爬虫:Scrapy框架"
		username: "mingfeng4923"
	}
message: "success"

在这里插入图片描述

第五步:循环查询质量分

在这里插入图片描述

🌖完整代码

整合以上步骤,使用Python编写完整代码。首先获取文章列表链接,然后遍历列表获取每篇文章的质量分数。输出文章链接和质量分数。

# CSDN个人博文质量查询
import requests
from requests_toolbelt import MultipartEncoder

UserName = "mingfeng4923"
# 获取文章列表
def get_post_list_urls(page, username):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
    }
    lb_params = {
        "page": page,
        "size": "20",
        "businessType": "blog",
        "orderby": "",
        "noMore": "false",
        "year": "",
        "month": "",
        "username": username,
    }
    urls = "https://blog.csdn.net/community/home-api/v1/get-business-list"
    try:
        res = requests.get(url=urls, headers=headers, params=lb_params)
        # print(res.status_code)
        data_list = res.json()["data"]["list"]
        return data_list
    except Exception as e:
        print(f"[+] [ending] [{e}]")
        return 0

# 查询质量分数
def get_sorce(article_url):
    url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"

    headers = {
    	# headers 
    }
    params = MultipartEncoder({"url": article_url})
    headers["Content-Type"] = params.content_type
    try:
        res = requests.post(
            url,
            headers=headers,
            data=params,
            timeout=10,
        )
        # print(f"[+] [{article_url}] [{res.status_code}] ")
        sorce = res.json()["data"]["score"]
        # print(sorce)
        return sorce
    except Exception as e:
        print(f"[+] [分数获取失败] [{article_url}] [{res.status_code}] [{e}]")
        return 0

UserName = 'mingfeng4923'
res = []
page = 1
while True:
    data_list = get_post_list_urls(page, UserName)
    page += 1
    if data_list == 0 or len(data_list) == 0:
        break
    else:
        res += data_list
for data in res:
    article_url = data["url"]
    print(article_url,get_sorce(article_url))

通过以上代码,我们可以获取指定CSDN用户的所有文章链接,并查询每篇文章的质量分数。这对于分析文章的质量和影响力非常有用。你可以根据自己的需求对代码进行进一步的修改和扩展。

Happy coding!🎉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git快速入门

Git 1、Git概述Git简介Git下载与安装 2、Git代码托管服务常用的Git代码托管服务使用码云托管服务 3、Git常用命令Git全局设置获取Git仓库工作区、暂存区、版本库概念本地仓库常用命令远程仓库操作命令分支操作标签操作 4、在IDEA中使用Git在IDEA中配置Git获取Git仓库本地仓库操…

OpenAI Gym入门与实操(2)

本文内容参考: Getting Started With OpenAI Gym | Paperspace Blog, 【强化学习】 OpenAI Gym入门:基础组件(Getting Started With OpenAI Gym: The Basic Building Blocks)_iioSnail的博客-CSDN博客 3. 环境&#…

Blender导出gltf格式ThreeJS不显示问题-

1. 检查代码 import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; 。。。。。。initRoomGltf() {const _this this;// const loader new OBJLoader();const loader new GLTFLoader();// load a resourceloader.load(// resource URL// this.commonFunc.getPat…

vcruntime140_1.dll无法继续执行代码,有哪些方法可以解决?

关于vcruntime140_1.dll无法继续执行代码的错误问题,其实还是非常的普遍的,这属于经常丢失的dll文件之一,当然还有一个vcruntime140.dll也是非常容易丢失的,本文下面会介绍到这两种有啥区别,以及怎么去修复这些文件丢失…

spring复习:(4)AbstractEnvironment

该类中指定了激活profile属性的名称(spring.profiles.active),默认profile属性的名称(spring.profiles.default),以及默认的profile的名字(default)。

【Leetcode】19.删除链表的倒数第 N 个结点

一、题目 1、题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]示例2: 输入:head = [1], n = 1 输出:[]示例3: 输入:head = [1,2], n = 1 输出:[1]提示: 链表中结点的数目为 sz…

【剑指offer专项突破版】二叉树篇——“C“

文章目录 前言一、二叉树剪枝题目分析思路分析代码 二、序列化与反序列化二叉树题目分析思路分析代码 三、从根节点到叶节点的路径数字之和题目分析思路分析代码 四、 向下的路径节点之和题目分析思路分析思路①代码思路②代码 五、节点之和最大的路径题目分析思路分析代码 六、…

XSS注入——DOM型XSS

DOM型xss XSS根据恶意脚本的传递方式可以分为3种,分别为反射型、存储型、DOM型,前面两种恶意脚本都会经过服务器端然后返回给客户端,相对DOM型来说比较好检测与防御,而DOM型不用将恶意脚本传输到服务器在返回客户端,这…

Elasticsearch 地理空间计算

地理位1置搜索:使用查询API进行搜索 1、Geo Distance Query Geo Distance Query是在给定的距离范围内搜索数据的查询。例如,可以搜索给定地理位置附近指定距离内的所有文档。 GET /my_index/_search {"query": {"bool" : {"fi…

9、Redis集群(cluster)

是什么 Redis集群是一个提供在多个Redis节点间共享数据的程序集,Redis集群可以支持多个master 能干嘛 Redis集群支持多个master,每个master又可以挂载多个slave 读写分离 支持数据的高可用 支持海量数据的读写存储操作 由于Cluster自带Sentinel的故障转…

软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

目录 掌握的知识点 创建型 结构型 行为型 掌握的知识点 设计模式分为哪3类 每一类包含哪些具体的设计模式 创建型 创建型模式是对对象实例化过程的抽象,他通过抽象类所定义的接口,封装了系统中对象如何创建、组合等信息。 创建型模式主要用于创建对…

Buildroot 取消默认QT桌面-迅为RK3588开发板

本小节将讲解如何取消掉默认的 qt 桌面。 首先对开发板进行上电,开发板正常启动后,使用命令“cd /etc/init.d”进入到/etc/init.d 目录 下,然后使用以下命令对开机自启动脚本 rcS 进行查看,如下图所示: vi rcS 从上…

视觉SLAM十四讲需要提前知道的数学基础知识

学习视觉SLAM十四讲之前的必备数学基础知识 1. 正交矩阵2. 线性关系3. 求矩阵的逆4. 叉乘5.反对称矩阵6. 复数 1. 正交矩阵 定义: 设n阶矩阵A满足AATATAI ,则称A为正交矩阵 性质: 以下为手写,从小字丑,请多担待。。 …

红色通信史(一):红色通信的萌芽

1927年4月和7月,蒋介石、汪精卫分别在上海、武汉发动“四一二”、“七一五”反革命政变,实行“清党”、“分共”,大肆逮捕和杀害中共党员,制造“白色恐怖”。 面对敌人的残酷镇压,我党决定创建自己的革命军队&#xff…

元宇宙装备展正式拉开帷幕,深眸科技CEO周礼出席产业论坛发表主题演讲

6月27日,一场令人期待已久的工业元宇宙盛会在昆山国际会展中心拉开帷幕,大会由昆山市人民政府主办,昆山市工业和信息化局、赛迪工业和信息化研究院集团(苏州)有限公司联合承办,并得到了十数家单位的支持&am…

计算机网络那些事之 MTU 篇 pt.2

哈喽大家好,我是咸鱼 在《计算机网络那些事之 MTU 篇 》中,咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU,则就会进行分片操作(Fragment);如果小于 MTU&#x…

Git安装及使用图文教程详解(附带安装文件)

Git安装及使用图文教程详解(附带安装文件) 原创:丶无殇  2023-06-26 文章目录 下载安装下载安装验证安装成功版本查看 基础指令Git常用指令【首次必须】设置签名用户、邮箱1.初始化本地仓库2.查看本地库状态3.创建文件4.添加文件至暂存区5…

maven打包本地jar到项目中

在maven项目中&#xff0c;我们的项目依赖一般取自local的repository或者远程的repository&#xff0c;比如下面这个配置&#xff1a; maven <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> &l…

C++11新特性(5):多线程

学习C11&#xff0c;根据网上资料的知识总结。 1. 线程创建 1.1 初始函数 #include <iostream> #include <thread> void myfunc(int &a) {cout << "a in myfunc:" << a << endl; }int main() {int a 1;std::thread mythread(…

C1. Make Nonzero Sum (easy version) - 思维

分析&#xff1a; n一但是奇数就一定不行&#xff0c;因为无论有多少-1和1都会导致最后的和是-1或1&#xff0c;每次断开一个区间会改变2&#xff0c;所以一定不行&#xff0c;直接输出-1。 其次&#xff0c;如果数组满足题意也可以一个一个输出每一个下标&#xff0c;遍历数组…