吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5297|回复: 14
上一主题 下一主题
收起左侧

[Web逆向] Python反反爬之访问逻辑---推心置腹

  [复制链接]
跳转到指定楼层
楼主
Java_S 发表于 2020-12-31 18:33 回帖奖励

写在前面

Python反反爬系列

  1. JS混淆---源码乱码
  2. JS混淆---动态Cookie

这次的题目相比于前两次的题目简单一些,话不多说,我们直接开整

题目


题目网址,点我去刷题
抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中

分析网页

老规矩,我们还是首先打开刷题网站,接着打开谷歌调试工具
查看【XHR】里面的内容

跟前两道题是一样的,数据都是通过ajax传递的,我们也不用去打开这个网址了
经过前面两道题的经验,直接打开肯定是不行的
我们来到【ALL】里面,查看一下所有的请求

我们可以看到有两个名为【3】的请求,但是这两个是不一样的
第一个的url是:http://match.yuanrenxue.com/match/3,也就是题目的这个网址
第二个的url是:http://match.yuanrenxue.com/api/match/3,是网页数据来源的网址
根据我们第二题的经验可能会去对比两个名字相同的请求,但是在这道题里面,可比性不大

那么就点击数据来源的网址,看看请求的一些信息

可以发现有一条【Set-Cookie】的信息,很特别

查看前面的几条请求,可以发现,只有红色方框请求有这个值,连第一个名为【3】的请求也没有

那么,我们就可以推测,是不是这个名为【logo】的请求动了什么手脚
我们点击页面的下一页,看看有没有新的变化

可以发现,名为【logo】的请求又出现了,而且每次都是在网页数据来源请求之前
那么,这道题目的逻辑就很清楚了,要想正常的拿到网页数据,就必须先访问【logo】这个请求

【logo】到底做了什么


我们查看【logo】这个请求,也没有发现JS的代码,平平无奇
所以,我们可以大胆的做这个猜测

  1. 首先访问http://match.yuanrenxue.com/logo,在响应头中取得sessionid的值
  2. 接着再去访问网页数据来源的网址

验证猜想

import requests

# 实例化session
session = requests.session()

# 设置请求头,必须这么写,不然会请求失败,
# 具体原因我也不是很知道,如果有大佬知道的话,可以分享一下
headers = { 'Connection': 'keep-alive',
            'User-Agent': 'yuanrenxue.project',
            'Accept': '*/*',
            'Origin': 'http://match.yuanrenxue.com',
            'Referer': 'http://match.yuanrenxue.com/match/3',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
           }
# 名为【logo】请求的url
url = 'http://match.yuanrenxue.com/logo'
# 设置请求头数据
session.headers = headers
# 使用session发起请求
response = session.post(url=url)

url_api = f'http://match.yuanrenxue.com/api/match/3'
res = session.get(url=url_api).json()
# 成功获取到数据,猜想成功
print(res)
#{'status': '1', 'state': 'success',
# 'data': [{'value': 2838}, {'value': 7609}, {'value': 8717},
# {'value': 6923}, {'value': 5325}, {'value': 4118}, {'value': 8884},
# {'value': 8717}, {'value': 2680}, {'value': 3721}]}

通过这样的方式,我们如愿以偿地拿到了数据,我们就可以愉快地写Python代码解答题目啦

解出答案

# @BY     :Java_S
# @Time   :2020/12/31 15:45
# @Slogan :够坚定够努力大门自然会有人敲,别怕没人赏识就像三十岁的梵高

import requests
import pandas as pd

def get_data(page_num):
    session = requests.session()

    headers = { 'Connection': 'keep-alive',
                'User-Agent': 'yuanrenxue.project',
                'Accept': '*/*',
                'Origin': 'http://match.yuanrenxue.com',
                'Referer': 'http://match.yuanrenxue.com/match/3',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
               }
    url = 'http://match.yuanrenxue.com/logo'
    session.headers = headers
    response = session.post(url=url)

    url_api = f'http://match.yuanrenxue.com/api/match/3?page={page_num}'
    res = session.get(url=url_api).json()
    data = [i['value']for i in res['data']]
    return data

if __name__ == '__main__':
    data = []
    for i in range(1,6):
        data_list = get_data(i)
        data.extend(data_list)
    count = pd.value_counts(data)
    print(count)

这次的题目是:统计出现频率最高的申请号,因为我之前学过Pandas,所以直接用了里面的函数得出答案

最后提前祝大家新年快乐,这个系列,明年继续更新!

免费评分

参与人数 5吾爱币 +4 热心值 +5 收起 理由
yjn866y + 1 + 1 我很赞同!
youaremybaby + 1 谢谢@Thanks!
0615 + 1 + 1 我很赞同!
Hacker_Xi + 1 + 1 用心讨论,共获提升!
hshcompass + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| Java_S 发表于 2021-1-2 14:47 |楼主
可控核聚变 发表于 2021-1-2 13:24
这两天一直在看你的这三个项目,虽然有很多还不明白,但是也受益匪浅,感谢!

感谢支持
沙发
chhzll 发表于 2020-12-31 18:46
3#
祈愿啊 发表于 2020-12-31 19:44
4#
lian52yy 发表于 2020-12-31 20:02
谢谢楼主分享教学,元旦好~
5#
hj170520 发表于 2020-12-31 20:16
顶一个,元旦快乐呀
6#
hshcompass 发表于 2020-12-31 20:17
新年快乐
7#
Jack-yu 发表于 2020-12-31 21:34
好小子,又是你,不来点rap节目?
8#
 楼主| Java_S 发表于 2020-12-31 22:34 |楼主
Jack-yu 发表于 2020-12-31 21:34
好小子,又是你,不来点rap节目?

哈哈哈,明年肯定会有的
9#
welcome7758521 发表于 2021-1-1 10:17
我收藏了会好好学习的
10#
寒冰流火 发表于 2021-1-1 14:40
小白的代码功力浅只跟大佬学下感谢楼主了新年快乐
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表