#数据接口其实很容易找到,但请求参数中的cookies中的yuanrenxue_cookie值是动态变化的,因此,找出如何生成这个值是关键。
#尝试全局搜索并逐一排查后并不能找到生成信息,只能尝试用fiddler进行抓包,发现对于页面的请求发生了两次,第一次返回了被script标签包裹的js代码
#原http返回的js代码作用就是赋值cookie并且刷新页面,这就解释了为什么同一个url会被请求两次:第一次获取cookie值,第二次带着cookie获取页面。由于每次作首次请求的时候返回的cookie生成代码都是不一样的,所以需要现拿现用,不能想着去把它扣下来
#所以思路就是模拟两次请求,第一次请求页面获取cookie,第二次请求接口获取数据。
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
'referer': 'https://match.yuanrenxue.cn/match/13'
}
import time
import requests
import re
num_list = []
session = requests.session()
cookies = {
'sessionid':'v72ui8lggkfplu82p57g6j39hqkhheuf',
}
session.headers.update(headers)
session.cookies.update(cookies)
#模拟第一次请求
while True:
try:
#获取响应
response = session.get('https://match.yuanrenxue.com/match/13').text
except:
print('再试一次')
pass
else:
break
cookies = re.findall("'([a-zA-Z0-9=_|])'", response)#返回cookie的字符串列表
yuanrenxue_cookie = ''.join(cookies)#合并
#获取并设置会话的cookies
key, value = yuanrenxue_cookie.split('=')
cookie = {key: value}
session.cookies.update(cookie)
for i in range(1, 6):
url = 'https://match.yuanrenxue.com/api/match/13?page={}'.format(i)
response = session.get(url=url)
values = response.json()['data']
for v in values:
value = v['value']
num_list.append(value)
print(sum(num_list))
猿人学第十三题(含详细解释)
最新推荐文章于 2024-10-10 20:18:32 发布