改版之后的
目标网址:
https://match.yuanrenxue.cn/match/3
需求概述:
任务3:抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中
抓包分析:
每次请求page之前都有个jssm
查看这个jssm中的相应值中有session id
而单独请求page包是不反回我们想要的结果,返回了一段js
将这段js拿出来进行解码,解出来是个undefined
到这里就卡住了,继续charles抓包分析,那么每次请求page 之前都需要请求jssm,那么我们代码复现先请求jssm在请求page,尝试一下
charles中的response是有相应的session的
但是postman中复现不出来,为什么呢?
对比两段请求,发现只有headers是不一样的,那么我们用session写死headers,与charles中的保持一样顺序
使用pycharm复现,打印cookie、headers
是可以的,那么监听cookie,去请求page,成功!
使用python复现:
# -*- coding:utf-8 -*-
"""
@author:
@file: demo.py
@time: 2023/5/18 11:14
@desc:
"""
import json
import requests
from requests import session
import requests
se = session()
url = "https://match.yuanrenxue.cn/jssm"
payload = "https://match.yuanrenxue.cn/jssm"
headers = {
'content-length': '0',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'sec-ch-ua': '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"macOS"',
'accept': '*/*',
'origin': 'https://match.yuanrenxue.cn',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': 'https://match.yuanrenxue.cn/match/3',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'Cookie': '用自己的cookie',
}
se.headers = headers
response = se.post(url, verify=False)
print(response.text)
print(response.headers)
print(response.cookies)
# exit()
url = "https://match.yuanrenxue.cn/api/match/3?page=1"
response = se.request("GET", url, headers=headers)
print(response.text)
# exit()
if __name__ == '__main__':
values = []
jssm_url = "https://match.yuanrenxue.cn/jssm"
for page in range(1, 6):
url = "https://match.yuanrenxue.cn/api/match/3?page={}".format(str(page))
se.post(jssm_url)
res = se.get(url)
values.extend([val['value'] for val in json.loads(res.text)['data']])
print(values)
print(max(values, key=values.count))