解放双手!写了个小工具给喜欢的博主一键三连

1. 写在前面

  大家写博客的可能都知道,有时候我们或多或少会认识一些志同道合的博主。大家在写博客的时候偶尔也都会彼此之间相互支持一下

再如果看到自己感兴趣的文章,想收藏一下。这些需求我们目前大部分人都自己用手去操作,这是非常费力的。所以我浅研了一下写了一个小爬虫工具,以此来解放我们的双手,让程序帮助我们完成以上的这些操作!

声明:本文所涉及的技术爬虫示例仅供学习和研究之用!请大家在合法范围内使用爬虫技术,并尊重网站的使用规则和隐私政策

2. 进入主题

首先我们需要先登陆我们自己的账号,大部分的操作都是依赖账号捆绑的,我们先在用户登陆框输入账号信息看一下登陆提交的表单信息,如下:

在这里插入图片描述

根据上图登陆提交参数,我们就可以实现代码:

import requests

session = requests.session()
account = '账号ID'
headers = {
	  'Accept': 'application/json, text/plain, */*',
	  'Accept-Language': 'zh-CN,zh;q=0.9',
	  'Connection': 'keep-alive',
	  'Content-Type': 'application/json;charset=UTF-8',
	  'Origin': 'https://passport.csdn.net',
	  'Referer': 'https://passport.csdn.net/login?code=applets',
	  'Sec-Fetch-Dest': 'empty',
	  'Sec-Fetch-Mode': 'cors',
	  'Sec-Fetch-Site': 'same-origin',
	  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
	  'X-Tingyun-Id': 'im-pGljNfnc;r=533164990',
	  'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
	  'sec-ch-ua-mobile': '?0',
	  'sec-ch-ua-platform': '"macOS"',
	}
	
	data = '{"userIdentification":"'+ f"{account}" +'",
		"pwdOrVerifyCode":"密码","loginType":"1",
		"webUmidToken":"","uaToken":""}'
	response = session.post(
		'https://passport.csdn.net/v1/register/pc/login/doLogin',
		headers=headers,
		data=data
    )

data参数内需要我们更换的就是账号与密码了,更换即可

接下来我们post请求登陆后,就需要我们使用cookie保持登陆状态进行后续的点赞、评论、收藏

接下来我们看一看点赞是如何实现的,首先我们点赞查看一下请求信息:

在这里插入图片描述

可以看到点赞接口是非常简单的,提交的参数只有一个文章ID,那么我们开始实现如下:

data = {
   'articleId': 文章ID,
}
response = session.post(
	"https://blog.csdn.net//phoenix/web/v1/article/like", 
	headers=self.headers,
	data=data,
	cookies=session.cookies
)

接着我们看看评论是如何实现的,评论提交请求也是非常简单的。基本上没有太复杂的参数提交,也没有加密都是明文

在这里插入图片描述

那么我们的评论实现代码如下:

data = {
   'commentId': '',
    'content': '要评论的内容',
    'articleId': '文章ID'
}
        response = self.session.post('https://blog.csdn.net/phoenix/web/v1/comment/submit', headers=self.headers, cookies=session.cookies, data=data)

最后我们看一下收藏是如果去实现的,收藏相比前两项稍微多了一项请求,可以看到首先我们点击收藏的时候弹出了一个框,是我们的收藏夹
在这里插入图片描述

所以第一步我们需要先获取收藏夹的ID

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/json;charset=UTF-8',
    'Origin': 'https://passport.csdn.net',
    'Referer': 'https://passport.csdn.net/login?code=applets',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
    'X-Tingyun-Id': 'im-pGljNfnc;r=533164990',
    'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
}
# 收藏
params = (
    ('url', 'https://blog.csdn.net/qiulin_wu/article/details/文章ID'), # 收藏的网站
)
# 获取收藏夹id
response = self.session.get('https://mp-action.csdn.net/interact/wrapper/pc/favorite/v1/api/folderListWithCheck', headers=headers, params=params, cookies=session.cookies)
folderId = response.json().get("data").get("result")[0].get("ID")

最后我们就剩下收藏操作了,如下:

在这里插入图片描述

可以看到收藏提交的也是一堆参数,不过也都是比较简单的,代码实现如下:

# 一堆参数
username = '自己的账号ID'
data = '{
	"url":"https://blog.csdn.net/qiulin_wu/article/details/132106681",
	"source":"blog",
	"sourceId":文章ID,
	"author":"要收藏文章的作者ID,
	"title":"title","description":"description",
	"fromType":"PC",
	"username":"'+ f"{username}" +'","folderIdList":[%d]}' % folderId
        response = self.session.post('https://mp-action.csdn.net/interact/wrapper/pc/favorite/v1/api/addFavoriteInFolds', headers=headers, data=data.encode('utf-8'), cookies=cookie)

folderId这个字段的就是上面收藏夹请求拿到的ID

好的,到此我们就将一键三连完美的用程序实现出来了。现在我们看一看效果:

在这里插入图片描述
  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

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

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

相关文章

Oracle连接数据库提示 ORA-12638:身份证明检索失败

ORA-12638 是一个 Oracle 数据库的错误代码,它表示身份验证(认证)检索失败。这通常与数据库连接相关,可能由于以下几个原因之一引起: 错误的用户名或密码: 提供的数据库用户名或密码不正确,导致…

Ogami Organic Store有机商店WordPress主题

Ogami Organic Store有机商店WordPress主题是一个整洁且响应迅速的 WooCommerce WordPress 主题,适用于任何类型的食品、蔬菜店、化妆品或类似网站,这些网站需要功能丰富且美观的在线展示以及优雅灵活的设计。 网址: Ogami Organic Store有机商店WordPr…

day06-点赞系统

当热心用户或者老师给学生回答了问题以后,所有学员可以给自己心仪的回答点赞,点赞越高,排名也越靠前。 1.1.业务需求 首先我们来分析整理一下点赞业务的需求,一个通用点赞系统需要满足下列特性: 1.2.实现思路 要保…

【STM32】简介

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星T…

玩转VS code 之 C/C++ 环境配置篇

PS:俺是菜鸟,整理和踩坑试错花了不少时间,如果这篇文章对您有用的话,请麻烦您留下免费的赞赞,赠人玫瑰,手留余香,码字踩坑不易,望三连支持 上一篇:玩转 VS code 之下载篇…

linux安装mysql-8.0.33正确方式及常见问题

目录 获取mysql下载地址链接 解压安装包 复制文件到安装目录 添加用户和用户属组修改权限 创建存储数据的文件夹/usr/local/mysql 初始化安装 修改配置文件 创建日志文件并赋予对应权限 启动成功​编辑 创建软链接 之前安装过mysql,时间比较长忘记安装步骤了今天…

Java基础知识实际应用(学生信息管理系统、猜拳小游戏、打印日历)

一、Java学生信息管理系统 这个系统包含了添加、修改、删除、查询和显示所有学生信息等功能。您可以在此基础上进行修改和完善,以适应您的需求。 import java.util.Scanner;public class StudentManagementSystem {private static Scanner scanner new Scanner(S…

CSS:服务器字体 与 响应式布局(用法 + 例子 + 效果)

文章目录 服务器字体定义 服务器字体使用例子 响应式布局设备类型设备特性例子 服务器字体 解决字体不一致而产生的。 首先,在网上把字体下载好。 定义 服务器字体 font-face{font-family:字体名称;src:url(字体资源路径); }使用 在需要使用的选择器里加上 font…

【100天精通python】Day36:GUI界面编程_高级功能操作和示例

专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 一、GUI 高级功能 1 自定义主题和样式 自定义主题和样式可以让你的GUI应用程序在外观方面更加出色。在使用Tkinter时,你可以使用ttkthemes库来应用不同的主题和样式。…

OpenCV-Python中的图像处理-傅里叶变换

OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

flutter开发实战-just_audio实现播放音频暂停音频设置音量等

flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放,这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上,video_p…

使用vscode在vue项目中重命名文件选择了更新导入路径仍有部分导入路径没有更新

背景: 将一个js文件重命名,vscode弹出是否更新导入路径,选择更新导入后,发现js文件中导入路径都自动更新,vue文件中路径都没有更新。 解决方案: 在设置中搜索updateimport,将最下面的Vue>Update Imports…

步入React正殿 - 生命周期

目录 资料 三个阶段的生命周期函数 创建阶段 初始化阶段constructor 挂载阶段componentWillMount 挂载阶段render 挂载阶段componentDidMount 更新阶段【props或state改变】 更新阶段componentWillReceiveProps 更新阶段shouldComponentUpdate【可不使用,…

21款美规奔驰GLS450更换中规高配主机,汉化操作更简单

很多平行进口的奔驰GLS都有这么一个问题,原车的地图在国内定位不了,语音交互功能也识别不了中文,原厂记录仪也减少了,使用起来也是很不方便的。 可以实现以下功能: ①中国地图 ②语音小助手(你好&#xf…

Handler机制(一)

Handler基础 Handler机制是什么? Handler是用来处理线程间通信的一套机制。 初级使用 第一步:在主线程中定义Handler private Handler mHandler new Handler(Looper.myLooper()){Overridepublic void handleMessage(NonNull Message msg) {super.ha…

C语言 字符指针

1、介绍 概念: 字符指针,就是字符类型的指针,同整型指针,指针指向的元素表示整型一样,字符指针指向的元素表示的是字符。 假设: char ch a;char * pc &ch; pc 就是字符指针变量,字符指…

Spring系列篇--关于IOC【控制反转】的详解

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Spring的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.什么是Spring 二.Spring的特点 三.什…

用node.js搭建一个视频推流服务

由于业务中有不少视频使用的场景,今天来说说如何使用node完成一个视频推流服务。 先看看效果: 这里的播放的视频是一个多个Partial Content组合起来的,每个Partial Content大小是1M。 一,项目搭建 (1)初…

Docker 安装和架构说明

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Liunx下制造了一个隔离的文件环境,因此他的执行效率几乎等同于所部署的linux主机。因此Docker必须部署在Linux内核系统上。如果其他系统想部署Docke…

使用maven打包时如何跳过test,有三种方式

方式一 针对spring项目&#xff1a; <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> …