一、基本原理

简书文章在账号未登陆的的情况下,每刷新一次页面,文章阅读量便会 + 1 。

通过上述思路,我们可以得出,只要不断在浏览器刷新页面(未登陆情况下),便可以达到增加阅读量的目的。

但上述方式,需要不断点击页面刷新按钮,足见效率低下。

我们知道,在浏览器中,页面刷新的本质就是重新向服务器发送get请求,因此,我们猜想,在程序中不断模拟浏览器发出get请求,同样可以达到刷简书文章的目的。

通过浏览器抓包分析,如下图所示

抓包分析

我们发现,在整个请求过程中,阅读量的增加,主要发生于该post请求。

因此,我们只需要在程序中不断发送post请求该接口,便可实现利用程序刷文章阅读量。

二、代码实现

具体代码如下所示

import json

import re

import requests

import threading

# 获取简书文章阅读量

def getReadCount(jianshu_Url):

# 请求头设置

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'

}

# 请求页面,爬取页面源代码

result = requests.get(jianshu_Url, headers=headers)

# 使用正则表达式,在源代码中,获取表示当前文章浏览量的字符串

results = re.findall(r'"views_count":\d+', result.text)

# 返回结果

return results[0].split(':')[1]

# 增加阅读量

def addReadCount(jianshu_Url, readCountEnd):

# 请求体

payloadData = {

'fuck': 1

}

# 请求头设置

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36',

'Origin': 'https://www.jianshu.com',

'Referer': jianshu_Url

}

# 获取文章当前浏览量

nowReadCount = int(getReadCount(jianshu_Url))

# 循环发送post请求

temp = jianshu_Url["https://www.jianshu.com/p/a190a889563e".find("/p/") + 3:]

for i in range(nowReadCount, readCountEnd):

requests.post("https://www.jianshu.com/shakespeare/notes/" + temp + "/mark_viewed", data=json.dumps(payloadData), headers=headers)

print(i)

if __name__ == '__main__':

# 更改下方的两个参数即可

# 文章的请求路径

jianshu_Url = "https://www.jianshu.com/p/XXXXX"

# 需要刷到多少

readCountEnd = 1000

# 使用多线程,提高效率

for i in range(0, 30):

threading.Thread(target=addReadCount, args=(jianshu_Url, readCountEnd)).start()

上述变量,是一个“仅供参考”的变量,并不能决定,文章阅读量的最终结果,因为,在实际过程中,发现一个bug。

就是程序这边,有时候只发了一次post请求,但文章的阅读量却增加了 2 。

初步猜测,应该是简书服务器的bug,并非python程序问题!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐