Python爬虫:新手JS逆向—案例【1】获取新闻网内容

base64: "aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9pbmRleC9uZXcv"

某新闻网练习项目——主要获取内容,在此之前你需要学习:base64、MD5、 AES加密和解密、断点的使用

 我不喜欢废话,我们直接看怎么实现的:

比如我想要这个数据我们要怎么办呢?

粘贴

请求成功了

我直接给出代码了:

import json
import time

import requests
import urllib.parse
from hashlib import md5

cookies = {
    'ASP.NET_SessionId': 'yia0gk1jwug2xfesgxkqoc3u',
}

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/json;charset=UTF-8',
    # 'Cookie': 'ASP.NET_SessionId=yia0gk1jwug2xfesgxkqoc3u',
    'Origin': 'https://ggzyfw.fj.gov.cn',
    'Pragma': 'no-cache',
    'Referer': 'https://ggzyfw.fj.gov.cn/index/new/',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
    # 'portal-sign': 'd733ad65e764ab590ce3a14eb43a3927',
    'sec-ch-ua': '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
}

json_data = {
    "IS_IMPORT": 1,
    'pageSize': 8,
    'ts': int(time.time() * 1000),
    'type': '12',
}
a = json.dumps(json_data, separators=(",", ":"))
print(a)
json_data_str = urllib.parse.urlencode(json_data).replace("=", "").replace("&", "")
print("json_data_str:", json_data_str)

s = "B3978D054A72A7002063637CCDF6B2E5" + json_data_str
m = md5()
m.update(s.encode())
sign = m.hexdigest()
print(sign)
headers["portal-sign"] = sign
response = requests.post('?', cookies=cookies, headers=headers,
                         data=a)

print(response.text)


import base64
import json
from Crypto.Util.Padding import pad, unpad

from Crypto.Cipher import AES

# 一、 base64的解码
base64_encrypt_data = response.json().get("Data")
encrypt_data = base64.b64decode(base64_encrypt_data)
print("encrypt_data:", encrypt_data)

# 二、解密数据
# (1) 确认key和iv必须保证是16或者24,或者32
key = 'EB444973714E4A40876CE66BE45D5930'.encode()
iv = 'B5A8904209931867'.encode()
# (2) 构建一个aes对象
aes = AES.new(key, AES.MODE_CBC, iv)

# (3) 对数据解密
data = aes.decrypt(encrypt_data)
print(data)
print(data.decode())
data = unpad(data, 16)
print("data:", data.decode())

print(json.loads(data.decode()))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值