Python爬虫接口返回纯字母数字组合的结果,该如何解析和处理?

爬 app 的内容, 抓出接口的都是这些东西,

ADJD6RWCxaKzOX_DU5ksE2CnAr8n60kzOeTsEX8n60hOxDEITzfzcyrX6hWSA2kzOeEfovJ0Z5PC6qEI5lszL5KzOe-4TNkPWeQCovJnca8J6vEITe-1WMQDTqfzZR8fU2hDc0uwxzEIEe-YTqmDEzfzZR8fU2hDc0uwx2Ww6ykzOe-DovJex0CF6514Eejz1oYO1jb5I6B9IoBa1S0u11b-ppD816vsIGB41x2i16yG1LqLmmvvEzfzZ0gFx5hYUrgHZR_uEejzTeQPOv4fWD4fWvQDT9jPTNjPTDEsE2Wwx5CuxX_MxlhDZ0kzOeQsE2Wwx5CuxX_3cl_nUah9EejDovJFx0_uxvEIEX6SU27d5Mk9MvEsEXWexlJuEej4oeQfovJCc0hDR01nx5kzOzEPONTbGzjbTeQfWvJgoaszL5KzOe-4TNkPWMklovJnca8J6vEITe-1WMQDTqfzZR8fU2hDc0uwxzEIEe-YTqmDEzfzZR8fU2hDc0uwx2Ww6ykzOe-DovJex0CF6514EejzIoBZ1ozWI6q6ppDT1xvP1Szw1SDJ1x2i16yG165GEzfzZ0gFx5hYUrgHZR_uEejzTeQPOv4fWD4fWvQDT9jfWejCTvEsE2Wwx5CuxX_MxlhDZ0kzOeQsE2Wwx5CuxX_3cl_nUah9EejDovJFx0_uxvEIEX6SU27d5MkPEzfzc0Wwc2kzOeTYTNQsEXh96RJ3x2rF6qEIEe-mTzjbGzjmON-PEX4sADJS6vEITMKfWM-fTN-sE2rfc-uHEejDTMHCTNEPovJnca806RJ9L5gYEejzTqmPoeEzovJnca806RJ9L5gYZ0gH6qEITMEsE2Wwx5CuxXKzOzouYxiuHZVuSGVuSJVwwE9XXJiXdIxHYVjzovJex0CF6514R0_nUykzOzEDTN-moMQloMQ4ENEDOeTlOeKmEzfzZ0gFx5hYUrWwURJe6qEITvfzZ0gFx5hYUrg9Uyr4URTzOeEsE2Cw6yhsEejzU2u0xD8ZWHKzovJ9Z0gD6qEITzmfTvfzURWucugYZ5CuEejz_zjb1mzPEX4sADJS6vEITMKfWMQlTNEsE2rfc-uHEejDTMHCTNEPovJnca806RJ9L5gYEejzTqmPoeEzovJnca806RJ9L5gYZ0gH6qEITMEsE2Wwx5CuxXKzOzouYxiuHZVuSGVuSJVwwE9uwjeXdIxHYVjzovJex0CF6514R0_nUykzOzEDTN-moMQloMQ4ENEDOeECOeEDEzfzZ0gFx5hYUrWwURJe6qEITvfzZ0gFx5hYUrg9Uyr4URTzOeEsE2Cw6yhsEejzU2u0xD8ZWDEsEXWexlJuEejPoeQfovJCc0hDR01nx5kzOzEPT9TbGzjbWMECWqJgoaszL5KzOe-4TNkfWMKDovJnca8J6vEITe-1WMQDTqfzZR8fU2hDc0uwxzEIEe-YTqmDEzfzZR8fU2hDc0uwx2Ww6ykzOe-DovJex0CF6514Eejz11D3GzVX2jMHYEluSxlXebXwwEfzovJex0CF6514R0_nUykzOzEDTN-moMQloMQ4ENEDOe-1OeE9EzfzZ0gFx5hYUrWwURJe6qEITvfzZ0gFx5hYUrg9Uyr4URTzOeksE2Cw6yhsEejzU2u0xD8ZWu8sURTd_vEsEXWexlJuEejPoeQfovJCc0hDR01nx5kzOzEPWMQbGzjbWekmOqJgoaszL5KzOe-4TNkfTe-DovJnca8J6vEITe-1WMQDTqfzZR8fU2hDc0uwxzEIEe-YTqmDEzfzZR8fU2hDc0uwx2Ww6ykzOe-DovJex0CF6514Eejz1ozW1L5g1mISmmvvEzfzZ0gFx5hYUrgHZR_uEejzTeQPOv4fWD4fWvQDTejfWNj4TzEsE2Wwx5CuxX_MxlhDZ0kzOeQsE2Wwx5CuxX_3cl_nUah9EejDovJFx0_uxvEIEX6SU27d5MZ0LqEsEXWexlJuEejPoeQfovJCc0hDR01nx5kzOzEPT9dbGzjbWeKPWvJgoaszL5KzOe-4TNkfTMKDovJnca8J6vEITe-1WMQDTqfzZR8fU2hDc0uwxzEIEe-YTqmDEzfzZR8fU2hDc0uwx2Ww6ykzOe-DovJex0CF6514Eejz1pY61L5g1LqL1ozcIG5i1j2M1x2i16yGEzfzZ0gFx5hYUrgHZR_uEejzTeQPOv4fWD4fWvQDTejfTMjPWqEsE2Wwx5CuxX_MxlhDZ0kzOeQsE2Wwx5CuxX_3cl_nUah9EejDovJFx0_uxvEIEX6SU27d5MdCEzfzc0Wwc2kzOe-YTNQsEXh96RJ3x2rF6qEIEe-9OvjbGzjDWNTCEX4sADJS6vEITMKfWNHfT9ksE2rfc-uHEejDTMHCTNEPovJnca806RJ9L5gYEejzTqmPoeEzovJnca806RJ9L5gYZ0gH6qEITMEsE2Wwx5CuxXKzOzouSbRuSbRuSxljVmKzovJex0CF6514R0_nUykzOzEDTN-moMQloMQ4ENEPOeQPOeQlEzfzZ0gFx5hYUrWwURJe6qEITvfzZ0gFx5hYUrg9Uyr4URTzOeEsE2Cw6yhsEejzU2u0xD8ZWC8sURTzovJ9Z0gD6qEIWqmfTvfzURWucugYZ5CuEejzTMdDGzjbGeHPWNcz3qPpE2uHEejPWNQ4ONHfWqfzZR8fq5KzOeEPOMkfTe-sE2rfca6ucXWSx0mzOzEPoe-


Python爬虫接口返回纯字母数字组合的结果,该如何解析和处理?

11 回复

一个接口有这么长?


这种情况通常意味着接口返回的是经过编码或压缩的数据,比如Base64、Gzip压缩后的二进制数据,或者是某种序列化格式(如Protobuf)的十六进制表示。

首先,你需要检查响应头中的Content-Type,这是最重要的线索。然后根据类型选择对应的处理方式:

import base64
import gzip
import json
from io import BytesIO
import binascii

def parse_encoded_response(response_text, content_type=None):
    """
    解析编码的响应数据
    
    Args:
        response_text: 接口返回的纯字母数字文本
        content_type: 响应头中的Content-Type(如果有)
    """
    
    # 1. 先尝试最常见的Base64解码
    try:
        # Base64解码
        decoded = base64.b64decode(response_text)
        
        # 尝试解压Gzip(如果是压缩数据)
        try:
            decompressed = gzip.decompress(decoded)
            # 尝试解析为JSON
            try:
                return json.loads(decompressed.decode('utf-8'))
            except:
                return decompressed.decode('utf-8', errors='ignore')
        except:
            # 如果不是Gzip,直接尝试解码为字符串
            try:
                return decoded.decode('utf-8')
            except:
                return decoded  # 返回二进制数据
    
    except (binascii.Error, Exception):
        # 2. 如果不是Base64,尝试十六进制解码
        try:
            hex_decoded = bytes.fromhex(response_text)
            # 同样尝试解压和解析
            try:
                decompressed = gzip.decompress(hex_decoded)
                return json.loads(decompressed.decode('utf-8'))
            except:
                try:
                    return hex_decoded.decode('utf-8')
                except:
                    return hex_decoded
        except ValueError:
            # 3. 如果都不是,可能是自定义编码或原始数据
            return response_text

# 使用示例
response = "eyJkYXRhIjogIlRlc3QifQ=="  # Base64编码的JSON
result = parse_encoded_response(response)
print(f"解析结果: {result}")

# 如果是Gzip压缩的Base64
gzip_base64 = "H4sIAAAAAAAA/6tWykvMTVWyUsrJzE0FAFXc8XwHAAAA"  # "test"的gzip+base64
result2 = parse_encoded_response(gzip_base64)
print(f"Gzip解析结果: {result2}")

如果上述方法都不行,可能需要:

  1. 检查API文档,看是否有特定的编码方式
  2. response.content获取原始字节而不是response.text
  3. 查看响应头中的Content-Encoding字段

建议先确定数据的具体编码格式再处理。


哦 不 接口抓下来的内容是这些

安卓的 app 反编译一下,拿到密钥解密就是了

页端的话要么追踪调试 js 摸清解密方式,要么用浏览器抓取。
APP 的话要么反编译获取解密函数,要么用模拟点击的形式实现。


APP 的话 模拟点击? 用 appnium 还是什么?


反编译了 代码都混淆怎么办?
java 不好的我看不出来啊 …

就算是反编译也不一定看得出,有可能是在本地用 NDK 处理加解密的

只能一点一点分析了,没有捷径

一年就是加密后的数据,你需要逆向找到解密算法和密钥

回到顶部