前言
这几天刚刚开始写文章,想玩一玩粉丝服务的功能,但是等级太低了,怎么办呢? 要想提高等级,就要有足够的积分,积分怎么获得呢? 可以看到,每发表一次评论,就可以得到一分,但是我们总不能评论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"
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=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"]]
print(blogs_article_id_list)
完整代码
import requests
import random
import json
import time
URL = "https://blog.csdn.net/phoenix/web/v1/comment/submit"
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"
blogs_article_id_list = [i["articleId"] for i in json.loads(requests.get(blogs_article_id_url, headers=HEADERS).text)["data"]["list"]]
print(blogs_article_id_list)
for i in blogs_article_id_list:
data["articleId"] = i
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"
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": ""
}
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"]]
print(blogs_article_id_list)
for i in blogs_article_id_list:
data["articleId"] = i
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个常用小技巧
|