实战地址
http://match.yuanrenxue.com/match/3
抓包分析
地址栏输入 地址,按下F12并回车,发现数据在这里:
请求中有个 sessionid 字段的cookie,估计需要该值:
点击第二页,再分析,如下:
原来先访问了 :
http://match.yuanrenxue.com/logo
这个接口,返回设置 cookie,然后再带着这个cookie 请求类似这个接口:
http://match.yuanrenxue.com/api/match/3?page=2
即可。
这里要注意先后顺序,必须是请求 logo这个接口并设置好cookie之后,才能拿到数据,否则在错误的基础上返回的肯定是错误的数据。
没有任何反爬,直接检测了浏览器的相关字段:
headers = {
"Accept-Language": "zh-CN,zh;q=0.9",
'Referer': 'http://match.yuanrenxue.com/match/3',
}
headers必须带 "Accept-Language" 和 "Referer"字段,且不能包含 "Host"字段,否则也无法返回正确的结果。这种情况,只能一个一个试了。
另外还有一个requests库的坑,我原本想让Session()来保持cookie,发现如果将 session.headers进行赋值的话,也一样拿不到数据。
完整源码
虽然headers不需要带UA也能拿到数据,不过里面带UA是个好习惯哦。
数据获取的代码如下:
import requests
session = requests.Session()
headers = {
"Accept-Language": "zh-CN,zh;q=0.9",
'Referer': 'http://match.yuanrenxue.com/match/3',
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
}
cookie_url = "http://match.yuanrenxue.com/logo"
for page in range(1,6):
r = session.post(cookie_url,headers = headers)
api_url = f"http://match.yuanrenxue.com/api/match/3?page={page}"
r = session.get(api_url,headers = headers)
print (r.text)
至于题目代码,请读者自行完成。也就调个库的事。