猿人学-第三题-逆向分析

目标:抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中

翻页分析:翻页后,就只有jssm和page两个。这里我们可以联想一下看看jssm和page之间是不是有联系。

打开jssm,我们发现没有请求参数、请求头也没有加密。但、其响应标头有返回一个cookies的sessionid。这里我们多留一下这个sessionid,看看后面是不是对请求page起作用。

再打开page=2,我们也没有发现可以的加密参数和加密请求头。但是翻开cookies时,我们发现其有带sessionid这个由jssm的响应标头返回的cookies。

通过分析,我们大致可以得出一个思路:首先要请求jssm,取出jssm返回的sessionid。然后再请求page=2,page=2要带上上面取出的sessionid。再进行请求,然后直接得出结果。

但是这个问题真的有如此简单吗?直接上代码验证。

这里我们发现,其相应标头并没有返回cookies的sessionid。这是因为,该题的点在校验请求头的顺序。

重新构建请求头。

请求,可以得出结果。

那为什么请求头的顺序不对呢?

这是因为浏览器会对请求头排序,我们在浏览器看到的请求头都是经过排序的,而不是服务器原始顺序的请求头。解决这个问题,只需要使用抓包软件就可以解决。比如charles、findder等抓包软件。

下面page=2也是同样的方法。

源码如下:

import requests
from collections import Counter

class firstHeaders:
    def items(self):
        headers = {
            "Content-Length": "0",
            "Sec-Ch-Ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
            "Sec-Ch-Ua-Mobile": "?0",
            "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",
            "Sec-Ch-Ua-Platform": "Windows",
            "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, zstd",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cookie": "Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1716902967; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1717295263,1717314335; tk=-8838488315772654498; sessionid=t2ivk05m79d9oxqxutbcynikyeb93u88; m=7d8915425233260fbbc811c253bdc577|1717314348000; Hm_lvt_434c501fe98c1a8ec74b813751d4e3e3=1717311666,1717314893; Hm_lpvt_434c501fe98c1a8ec74b813751d4e3e3=1717314893; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1717314899; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1717334940"

        }
        return ((k,v) for k,v in headers.items())

def firstRequests():
    """获取:JSSM的sessionid"""
    url = "https://match.yuanrenxue.cn/jssm"
    response = requests.post(url, headers=firstHeaders(), verify=False)
    cookies = {
        "sessionid": response.cookies.get("sessionid")
    }
    return cookies

class secondHeaders:
    def items(self):
        headers = {
            "sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
            "Accept": "application/json, text/javascript, */*; q=0.01",
            "X-Requested-With": "XMLHttpRequest",
            "sec-ch-ua-mobile": "?0",
            "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",
            "sec-ch-ua-platform": "Windows",
            "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, zstd",
            "Accept-Language": "zh-CN,zh;q=0.9",
        }
        return ((k,v) for k,v in headers.items())

def secondRequests(cookies, page):
    url = "https://match.yuanrenxue.cn/api/match/3?page={}".format(page)
    response = requests.get(url, headers=secondHeaders(), cookies=cookies)
    return response.json()['data']


if __name__ == '__main__':
    calculate_num = []
    for page in range(1, 6):
        cookies = firstRequests()
        data_row = secondRequests(cookies, page)
        print(data_row)
        for row in data_row:
            val = row['value']
            calculate_num.append(val)
    top = Counter(calculate_num).most_common(1)[0]
    print(top)

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于您提到的错误TypeError: list indices must be integers or slices, not str,这是因为您在访问列表中的元素时使用了字符串作为索引,而列表的索引必须是整数或切片类型。解决这个错误的方法是使用整数或切片来访问列表中的元素。 关于您提到的猿人js逆向的问,我需要更多的信息才能为您提供具体的答案。对于爬虫编写,您可以使用Python的各种库(如Requests、BeautifulSoup、Scrapy等)来获取网页的内容,并进一步解析和处理。您可以使用这些库发送HTTP请求获取网页内容,然后使用解析库来提取您需要的数据。 爬虫编写的一般步骤如下: 1. 导入所需的库 2. 发送HTTP请求获取网页内容 3. 使用解析库解析网页内容 4. 提取所需的数据 5. 进行数据的进一步处理和存储 您可以根据具体的需求和网站的结构进行相应的编写和调试。如果您需要更具体的帮助,请提供更多的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python:TypeError: list indices must be integers or slices, not str报错解决及原理](https://blog.csdn.net/hhd1988/article/details/128031602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str](https://download.csdn.net/download/weixin_38590567/14871394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值