中石化js逆向分析

网站链接:aHR0cHM6Ly9iaWRkaW5nLnNpbm9wZWMuY29tL3RwZnJvbnQveHhnZy8wMDQwMDEv

目标:抓取十页数据

1.抓包

在这里插入图片描述
先是请求了url,然后请求接口,获取到列表数据在这里插入图片描述
看到cookie的几个参数比较可疑
在这里插入图片描述
请求首页的表单数据只有一个
那我请求其他页呢?
在这里插入图片描述
这几个数比较可疑
__EVENTARGUMENT: 表示要请求的页数
MoreinfoListsearch1$Pager_input: 表示跳转之前的页数
__VIEWSTATE: 应该是base64加密

不得不说,这个网站是真慢

2.分析js

在这里插入图片描述
可以看到index页面只是一个header与footer,没有数据
观察请求数据的url后,大胆猜测在/tpfront/CommonPages
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大致看一下源码,里面有列表页的数据,和提交数据的代码,用的同步方式
打上断点
在这里插入图片描述
在按下下一页的时候会立即在断点处断下来,在这里插入图片描述
升级了新版chrome对逆向很友好。爱了爱了
在这里插入图片描述
单步步过309行后发出请求
在这里插入图片描述
忽略断点,执行,再按新的一页,断在原来位置,在控制台输入在这里插入图片描述
这些参数,然后发现有输出在这里插入图片描述
放开断点对比一下抓包的数据和这个一样吗
发现一样。
在页面中搜索这个值,在这里插入图片描述
发现是写死的,页面应该是服务器返回的
然后看请求头在这里插入图片描述
多抓几次包,发现cookie不是动态的。
接下来就简单了

代码

#!usr/bin/env python
# coding:utf-8
"""
 @File  :中石化.py
 @Author:小生
 @date  : 2021-06-21 16:42
"""
import requests
import re
cookies = {
    'tpfront': '',
    'ASP.NET_SessionId': 'hzruz3gz02g51rg2epnzapt4',
    'BIGipServerPOOL_DZPT_5': '1405354506.20480.0000',
}

headers = {
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache',
    'sec-ch-ua': '^\\^',
    'sec-ch-ua-mobile': '?0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36',
    'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'no-cors',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'image',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Referer': '',
}
data = {
    'CategoryNum': '004001'
}

url = 'https://bidding.sinopec.com/tpfront/CommonPages/searchmore.aspx?CategoryNum=004001'
# 请求首页数据,因为首页要求的和后面不一样
response = requests.get(url, headers=headers, cookies=cookies, data=data)


def request_pag(x, response):
    __EVENTARGUMENT = str(x)
    __VIEWSTATE = \
        re.findall(r'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />', response.text,
                   re.M | re.I)[0]
    __VIEWSTATEGENERATOR = \
        re.findall(r'name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)" />', response.text,
                   re.I | re.M)[0]
    __EVENTTARGET = 'MoreinfoListsearch1$Pager'
    __EVENTVALIDATION = \
        re.findall(r'<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />',
                   response.text,
                   re.M | re.I)[0]
    data['__EVENTARGUMENT'] = __EVENTARGUMENT
    data['__VIEWSTATE'] = __VIEWSTATE
    data['__VIEWSTATEGENERATOR'] = __VIEWSTATEGENERATOR
    data['__EVENTTARGET'] = __EVENTTARGET
    data['__EVENTVALIDATION'] = __EVENTVALIDATION
    if x <= 2:
        pass
    else:
        data['MoreinfoListsearch1$Pager_input'] = str(x-1)
    print(__EVENTVALIDATION)
    print(__VIEWSTATE)
    response = requests.get(url, headers=headers, cookies=cookies, data=data)
    return response

for x in range(1, 11):
    print(x)
    response = request_pag(x, response)




请求一个新页面需要上一次请求的页面的正则匹配的数据,所以才这样写。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值