一、题目
二、分析
抓包一看究竟
通过postman模拟请求发现,他返回一段脚本:
通过代码美化&分析后发现:其实这个就是一个蜜罐!!!啥用处也没有!!!
那么现在我们分析一下Cookie,我们发现存在一个sessionid字段:
但是为什么使用postman直接请求没返回数据呢?都已经模拟整个头部了!但是很奇怪的是:每次刷新sessionid居然都不变?!!!很有可能是因为缓存的原因!!!其实每次请求sessionid都不一样的!!!
后来仔细看看!!!发现每次请求数据之前都会请求http://match.yuanrenxue.com/logo,有很大可能就是这个原因!!!
并且我们栈跟踪看到request请求的代码,更加坚信这点!!!:
因此我们猜测,先通过post请求logo那个接口,response Set-Cookie字段!!!
我们现在开始写爬虫代码!!!
三、爬虫代码
3.1获取sessionid
import requests
import re
headers = {
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'http://match.yuanrenxue.com/match/3',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
url_session = 'http://match.yuanrenxue.com/logo'
response = requests.post(url_session, headers=headers)
sessionid = re.findall('(?<=sessionid=).+?(?=;)',response.headers['Set-Cookie'])[0]
print(sessionid)
3.2请求数据
headers_t = {
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'http://match.yuanrenxue.com/match/3',
'Cookie' : 'sessionid={}'.format(sessionid),
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
url = 'http://match.yuanrenxue.com/api/match/3'
data = requests.get(url, headers=headers_t)
print(data.text)
3.3汇总
import requests
import re
headers = {
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'http://match.yuanrenxue.com/match/3',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
url_session = 'http://match.yuanrenxue.com/logo'
response = requests.post(url_session, headers=headers)
sessionid = re.findall('(?<=sessionid=).+?(?=;)',response.headers['Set-Cookie'])[0]
print(sessionid)
headers_t = {
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'http://match.yuanrenxue.com/match/3',
'Cookie' : 'sessionid={}'.format(sessionid),
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
url = 'http://match.yuanrenxue.com/api/match/3'
data = requests.get(url, headers=headers_t)
print(data.text)
3.4结果
成功!!!