先登录贴吧,保存下cookie方便登录使用
打开页面发现,如果关注的贴吧数大于8会分两部分展示贴吧信息:
但所有关注的贴吧信息都应该在网页源码中:
以某个贴吧的data-fid在源码中搜索:
发现关注的贴吧都在源码中有出现:
可以先写一个py来获得各个贴吧的名称:
import re
import requests
import json
cookies = {
'Cookie':'登录后产生的cookie复制到这里'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
r = requests.get('/index.html',cookies = cookies,headers = headers).text
kws = re.findall('"forum_name":"(.*?)",',r)
for kw in set(kws):
word = "u'"+kw+"'"
title = eval(word)
print(title)
进入某个贴吧,发现网址结构为:(网址结构简单方便进入)
/f?kw=秦时明月
打开控制台的情况下,点击签到,看提交了哪些网页:
发现有两个网页提交过:
通过网址名称及数据可猜出这个网址是签到的时间记录
/sign/loadmonth?kw=%E7%A7%A6%E6%97%B6%E6%98%8E%E6%9C%88&ie=utf-8&t=0.817119431343615
通过数据中有success,网址是add可猜出这是提交签到的网址:
/sign/add
ie:utf-8
kw:秦时明月
tbs:7deb781aa2e0a80f1538900881
可看出tbs为不知道的字符串,多看几个贴吧发现每个贴吧的tbs值都不相同
在网页源码搜索 "tbs" 发现源码中也有tbs值,将它复制下来写个爬虫提交一下
data = {
'ie': 'utf-8',
'kw': '天之痕电视剧',
'tbs': '315f3d4bb1c11aa11538901651',
}
r2 = requests.post('/sign/add',data=data,cookies=cookies,headers=headers).text
发现提交成功,打开网页也发现签到成功,总体流程基本也实现出来了:
1 先请求/index.html把所有关注的贴吧的名称记录下来
2 再请求/f?kw=贴吧名称 把关键字节tbs保存下来
3 最后post请求/sign/add 实现签到功能
代码如下:
import re
import requests
import json
cookies = {
'Cookie':'登录后产生的cookie复制到这里'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
r = requests.get('/index.html',cookies = cookies,headers = headers).text
kws = re.findall('"forum_name":"(.*?)",',r)
for kw in set(kws):
word = "u'"+kw+"'"
title = eval(word)
r1 = requests.get('/f?kw={}'.format(title),cookies=cookies,headers=headers).text
tbs = re.findall('\'tbs\': "(.*?)"',r1)[0]
# print(tbs) # 获得tbs
data = {
'ie': 'utf-8',
'kw': title,
'tbs': tbs,
}
r2 = requests.post('/sign/add',data=data,cookies=cookies,headers=headers).text
try:
result = json.loads(r2)["data"]["errmsg"]
print(title,result)
except:
print(title,'已经签过')
print('所有贴吧已签到完成')