猿人学第一届web端第三题

文章描述了在使用Python的requests库处理一个需要session和cookie的网页抓取任务时遇到的问题。作者通过Charles工具进行抓包分析,发现需要先请求jssm获取session,然后才能正确请求页面数据。最终,作者成功地在Python代码中模拟了这个过程,实现了数据抓取。
摘要由CSDN通过智能技术生成

改版之后的

目标网址: 

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))


结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值