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

news2024/11/24 3:07:16

🛠️ 环境准备

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

  • 操作系统: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!🎉

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

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

相关文章

2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

文章内容: 一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法 1.1 方法一 :IDEA中手动打包 1.2 方法二 :build.gradle中配置后编译时打包 二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法 一. JAVA | JAVA和Kotlin混开开发的程序…

Javalin:一个轻量的 Web Framework

说起 Java 语言下的 Web 框架那就非 Spring Framework 不可了,但是今天在和别人在聊天的过程中发现了一个新奇的项目 Javalin。Javalin 是一个轻量的 Web 框架。支持 WebSocket, HTTP2 和异步请求。简单的看了一下官方的说明文档,确实非常轻量&#xff0…

【ISO26262】汽车功能安全第5部分:硬件层面

对于每种方法,应用相关方法的推荐等级取决于 ASIL等级,分类如下: ———“”表示对于指定的 ASIL等级,高度推荐该方法; ———“”表示对于指定的 ASIL等级,推荐该方法; ———“o”表示对于指定的 ASIL等级,不推荐也不反对该方法。 表2 硬件设计的安全分析 单点故障度量 图 C.…

共享平台用户行为研究

背景 “促进平台经济、共享经济健康发展”是我国第十四个五年规划和二〇三五年远景目标中的重要内容。 研究工作概述 围绕共享平台和双边用户价值创造一般理论和实践,本研究综合多种方法(LDA、社会网络分析、计量经济模型等)和多种数据源交…

chatgpt赋能python:用Python编写SEO文章的技巧

用Python编写SEO文章的技巧 SEO(Search Engine Optimization)是优化网站以在搜索引擎中获得更高排名的过程。编写有趣、有价值且SEO友好的内容是重要的一环。在这篇文章中,我们将探讨使用Python编写SEO文章的技巧。 着重标记加粗的标题 搜…

[Eigen中文文档] 在 BLAS/LAPACK 、英特尔® MKL 和 CUDA 中使用 Eigen

文档总目录 本文目录 在BLAS/LAPACK使用 Eigen在英特尔 MKL使用 Eigen链接 在 CUDA 内核中使用 Eigen 在BLAS/LAPACK使用 Eigen 英文原文(Using BLAS/LAPACK from Eigen) 自Eigen 3.3版本以及以后,任何F77兼容的BLAS或LAPACK库都可以用作稠密矩阵乘积和稠密矩阵分…

第九十四天学习记录:C++核心:类和对象Ⅲ(五星重要)

深拷贝与浅拷贝 深浅拷贝是面试经典问题&#xff0c;也是常见的一个坑 浅拷贝&#xff1a;简单的赋值拷贝操作 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作 #define _CRT_SECURE_NO_WARNINGS 1#include<iostream> using namespace std;class Perso…

简述环保用电监管云平台

1、概述 推进打赢蓝天保卫战&#xff0c;打好碧水保卫战&#xff0c;打胜净土保卫战&#xff0c;加快生态环境保护、建设美丽中国&#xff0c;各省市结合物联网和大数据政策&#xff0c;也相继颁布有关污染治理设施用电监管平台等相关政策。针对企业内的环保设施、设备运行状况…

Spring Boot中Elasticsearch的连接配置、原理与使用

Spring Boot中Elasticsearch的连接配置、原理与使用 引言 Elasticsearch是一种开源的分布式搜索和数据分析引擎&#xff0c;它可用于全文搜索、结构化搜索、分析等应用场景。在Spring Boot中&#xff0c;我们可以通过Elasticsearch实现对数据的搜索和分析。本文将介绍Spring …

力扣 -- 62.不同路径、63.不同路径2

题目链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 以下是用动态规划的思想来解决这两道类似的动规的题目&#xff0c;相信各位老铁都是能够学会并且掌握这两道经典的题目的。 参考代码&am…

mac上使用brew安装mysql5.7

使用Homebrew进行MySQL数据库的安装需要MacOS系统中已经安装了相关环境 1.查询软件信息 首先使用search命令搜索MySQL数据库完整名称&#xff1a; brew search mysql可以看到5.7版本的MySQL数据库完整名称是mysql5.7 2. 执行安装命令 使用install命令进行软件安装&#xf…

Proxy vs Object.defineProperty:哪种对象拦截机制更适合你?

文章目录 简述版详解版相同点不同点1. 功能不同2. 语法和使用方式不同3. 支持程度不同4. 性能差异 简述版 Proxy 和 Object.defineProperty 是 JavaScript 中用于实现对象拦截和代理的两种不同机制。 Object.defineProperty 是一种在对象上定义新属性或修改现有属性的方式。 …

eNSP-DHCP全局配置和接口配置

eNSP-DHCP全局配置和接口配置 文章目录 eNSP-DHCP全局配置和接口配置一、题目要求二、题目分析三、拓扑结构搭建四、基本配置五、测试验证 一、题目要求 要求 &#xff1a; 1 、GE0/0/0 口所在广播域使用全局配置模式 2 、 GE0/0/1 口所在广播域使用接口配置模式 3 、 租期时间…

远古 Windows 98 SE 和 putty 0.63 连接 SSH

远古 Windows 98 SE 和 putty 0.63 连接 SSH 不忘初心一、故障表现二、产生原因三、解决办法四、重启 SSHD 服务生交配置参考 作者&#xff1a;高玉涵 时间&#xff1a;2023.7.1 操作系统&#xff1a; Windows 98 第二版 4.10.2222 A Linux version 5.19.0-32-generic (build…

慧灵六轴机械臂和电动夹爪,适配全自动粉面烘焙机器人

近日&#xff0c;慧灵科技HITBOT推出的六轴机械臂和平行电动夹爪等产品&#xff0c;出现在一台全自动粉面&烘焙机器&#xff0c;为煮饺子、云吞、面条的传统方式注入了现代科技的力量。这台机器结合了先进的六轴机械臂产品和精密的智能控制系统&#xff0c;能够在短时间内完…

CleanMyMac X中文版Mac电脑系统清理工具使用测评

有些人可能会说&#xff0c;mac系统根本就不需要清理&#xff0c;但是真正到你磁盘快满的时候就不是这种想法了&#xff0c;不管什么系统&#xff0c;它都会缓存一些系统、用户等文件&#xff0c;可能当时能够帮上大忙&#xff0c;能够在操作的时候更快、更便捷&#xff0c;但是…

78、基于STM32单片机步进电机速度调速控制系统设计(程序+原理图+PCB源文件+参考论文+开题报告+流程图+元器件清单等)

摘 要 伴随着时代的快速发展&#xff0c;单片机的应用也越来越广泛&#xff0c;促进了微电子和计算机的快速发展。我们日常生活中步进电机扮演着很重要的角色在我们身边随处可以见。因为步进电机本身的结构组成相对于比较简单、价格也比较便宜廉价。比如压榨机&#xff0c;打印…

【FATE联邦学习】get out put data报错output dir = result[“directory“]KeyError:directory“

报错信息不清不楚的。 经过几个周的排查&#xff0c;有以下原因&#xff1a; 自定义的trainer里面的predict函数没有返回有效的返回值。也有可能是自定义的网络没有使用softmax结尾。&#xff08;若没有&#xff0c;加上即可&#xff09; 应该是二者满足其一就可以。。因为有…

利用spleeter库实现人声和音乐分离(踩过的坑及解决方法)

0&#xff1a;起因 事情的起因是&#xff1a;想用一首歌的伴奏剪视频&#xff0c;但找遍各大平台&#xff0c;都只有原曲&#xff0c;没有伴奏。能找到的进行人声和背景音乐分离的软件都要收费&#xff0c;最后决定用spleeter库&#xff0c;尝试进行音频分离。 1&#xff1a;…

DAY3、DAY4(路飞)

字典 因为key不能为变量 只能为不可变的值 字典的key必须是唯一的 不然后面的值会吧前面的值覆盖 字典取值只能一个一个取 且只能通过key查询value 不能反过来 d.items就是变成了列表里 元祖的形式 这种取值是最推荐的。第三种比第二种推荐的方式 是因为第2种取值会先转…