IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python爬虫教程3 | 什么?你在CSDN上等级太低?Python爬虫来解决! -> 正文阅读

[人工智能]Python爬虫教程3 | 什么?你在CSDN上等级太低?Python爬虫来解决!

前言

这几天刚刚开始写文章,想玩一玩粉丝服务的功能,但是等级太低了,怎么办呢?
要想提高等级,就要有足够的积分,积分怎么获得呢?
在这里插入图片描述
可以看到,每发表一次评论,就可以得到一分,但是我们总不能评论400次吧——当然可以!
在这里插入图片描述

具体教程

阅读教程前请注意:此文章仅使用于学习交流,请自行承担一切后果和法律责任!

获取API

这篇文章中我也讲过API的使用方法,这里就不多说了,直接看图:
在这里插入图片描述
很好,获取到了CSDN的评论API,但是好像和以前有点不一样
在这里插入图片描述
没错,这里的请求变成了POST请求,也就是说我们要向服务器发送数据。

POST请求

POST请求会向服务器发送数据,上一章我们使用的是GET请求,是从服务器获取数据的。
在Python中,POST请求的表达方式为这样:

requests.post(url, headers=None, data=None)

其中data参数是字典,键为网址参数的名称,值为网址参数的内容,格式为:

{
    "参数1": "balabalabala",
    "参数2": "true",
    "参数3": "10000"
}

获取API参数和请求头

这很简单,从开发者工具里copy过来即可。
在这里插入图片描述
很明显,content是评论的内容;articleId是文章的id(文章的网址中会出现

获取待评论文章

很简单,看图:
在这里插入图片描述
这样我们就得到了获取作者文章的API:https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&username=python_delete
打开来看一下:
在这里插入图片描述
也就是说,我们可以获取文章的articleId参数,那就方便了!
话不多说,直接上代码:

代码

import requests
import random
import json # 用于处理数据

URL = "https://blog.csdn.net/phoenix/web/v1/comment/submit" # 评论API网址
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
} # 请求头
content_list = ["写得真好!", "太厉害了!", "好!!!", "好文!值得分享!"] # 评论列表
data = {
    "content": random.choice(content_list), # 从评论列表中随机选择
    "articleId": ""
} # 参数列表

# 文章API网址
# 自行修改page参数和size参数,可以使用for循环遍历
# 这里是为了避免自动化出现问题
blogs_article_id_url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page=0&size=10&username=请自行寻找作者,最好是有几千篇文章的那种&businessType=blog&orderby=&noMore=false"
blogs_article_id_list = [i["articleId"] for i in json.loads(requests.get(blogs_article_id_url, headers=HEADERS).text)["data"]["list"]] # 获取articleId列表
print(blogs_article_id_list)

完整代码

import requests
import random
import json # 用于处理数据
import time

URL = "https://blog.csdn.net/phoenix/web/v1/comment/submit" # API网址
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
} # 请求头
content_list = ["写得真好!", "太厉害了!", "好!!!", "好文!值得分享!"] # 评论列表
data = {
    "content": random.choice(content_list), # 从评论列表中随机选择
    "articleId": ""
} # 参数列表

blogs_article_id_url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page=3&size=10&username=python_delete&businessType=blog&orderby=&noMore=false" # API网址
blogs_article_id_list = [i["articleId"] for i in json.loads(requests.get(blogs_article_id_url, headers=HEADERS).text)["data"]["list"]] # 获取articleId列表
print(blogs_article_id_list)

for i in blogs_article_id_list: # 遍历列表
    data["articleId"] = i # 设置articleId
    response = requests.post(URL, headers=HEADERS, data=data)
    print(response.text)
    time.sleep(20 + random.random() * 10) # 休眠
    if i % 4 == 3: # 每遍历四次休眠一分钟
        time.sleep(60)

现在,让我们运行试试:
在这里插入图片描述
这是怎么回事呢?因为我们没有用户的信息,服务器不知道是谁发来的评论,自然不会发表了。

解决方法

既然这样,那怎么解决呢?答案很简单,那就是使用Cookie来发送用户信息。

Cookie

Cookie用于存储我们的用户信息。简单来说,当我们登录的时候,服务器向浏览器发送Cookie,浏览器会保存这个Cookie,下次来到这个网站的时候,浏览器直接使用存储的这个Cookie,就不需要再登录了。

获取Cookie

依旧是靠开发者工具:
在这里插入图片描述
懂了吗?在Python中Cookie放在headers里面,像这样:

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win32; x32) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
    "Cookie": "这是你的Cookie,直接从开发者工具copy即可"
}

最终作品

import requests
import random
import json # 用于处理数据
import time

URL = "https://blog.csdn.net/phoenix/web/v1/comment/submit" # 评论API网址
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win32; x32) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
    "Cookie": "请自行复制"
} # 请求头
content_list = ["写得真好!", "太厉害了!", "好!!!", "好文!值得分享!"] # 评论列表
data = {
    "content": random.choice(content_list), # 从评论列表中随机选择
    "articleId": ""
} # 参数列表

# 文章API网址
# 自行修改page参数和size参数,可以使用for循环遍历
# 这里是为了避免自动化出现问题
blogs_article_id_url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page=4&size=10&username=python_delete&businessType=blog&orderby=&noMore=false"
blogs_article_id_list = [i["articleId"] for i in json.loads(requests.get(blogs_article_id_url, headers=HEADERS).text)["data"]["list"]] # 获取articleId列表
print(blogs_article_id_list)

for i in blogs_article_id_list: # 遍历列表
    data["articleId"] = i # 设置articleId
    response = requests.post(URL, headers=HEADERS, data=data)
    print(response.text)
    time.sleep(20 + random.random() * 10) # 休眠
    if i % 4 == 3: # 每遍历四次休眠一分钟
        time.sleep(60)

运行结果非常成功!

尾声

再次声明,此文章仅使用于学习交流,请自行承担一切后果和法律责任!
(入狱概不负责)
求求各位了,给个三连吧!

往期推荐

Python爬虫教程1
Python爬虫教程2 // Python获取C站大佬们的文章数量
pip提高下载速度
Python字符串的10个常用小技巧

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:59:01  更:2021-09-19 08:00:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:37:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码