美团店铺数据抓取 token解析与生成

时间:2024-01-25 21:14:39

美团、点评网的token都是用一套加密算法,实际上就是个gzip压缩算法。加密了2次,第一次是加密了个sign值,然后把sign值带进去参数中进行第二次加密,最后得出token

  1. 分析请求

   打开上海美食, Network 抓包看一下,可以看到一个请求: getPoiList?cityName=XXXXX, 其中返回的就是我们想要的数据

我们打开这个请求看一下, 都有哪些参数

其中, uuid 和 _token是我们需要注意的
我们全局搜索一下 uuid 的值 , 发现uuid 就在我们当前页面返回的结果中, 我们可以直接拿来用

_token 参数 是经过加密后的结果, 是有时效性的, 所以接下来我们要解析它

2.解析Token

美团token的加密算法比较简单,

  • 加密: 二进制压缩, base64编码
  • 解密: base64解码, 二进制解压

定义解析token的方法

def decode_token(token):
    # base64解码
    token_decode = base64.b64decode(token.encode())
    # 二进制解压
    token_string = zlib.decompress(token_decode)
    return token_string

然后获取美团的token,调用decode_token方法进行解析:

eJxdjltvgkAQhf/LvkpkF3eFmvRBqqJYlAXxQuPDclGwogirCE3/e9fUvjSZ5JyZ8+VkvkAxiU
APQfgCoQRucQF6ALVhuwskwEuREFV5hFqXICSB8N9NJRIIiuUA9D40UaAq3e3j4Ij9A2E
MJVG7lX6tpqpbScFiHsxEICDhPC97slwm7SxO+ZWd2uE5k4Uvk1QWLwCBZguBCv18Kn
sq/9st8bNgy3R/Ei42q+PBQ5eq6dMkbrmJz2p/XmH9nU5WznIaNZ3+XS/GtG7Mw5CN1u
m48xZmOi2xA5ka31v2SzDpO3ZRNWy/0Hf1gMibaV+9ZfiWkQ5xjwYxrItHcboeWJfCmy
bEsOvu9O6k8dHS/HI9w9cyjjQYRxvdpfnQZgFdWriZrS6jsEbehmWLpvAD7uK91zJpwHy
tFdLd+q043eemV+8OnWWVE04QwzjKbWMcRGcbWePVPljImxuXUc5nK0OBSqCZzB1Z
r+D7Bx2Uick=

{
    "rId"100900,
    "ver""1.0.6",
    "ts"1571759551178,
    "cts"1571759551234,
    "brVD": [387726],
    "brR": [
        [1440900],
        [1440877], 2424
    ],
    "bI": ["https://sz.meituan.com/meishi/c227/"""],
    "mT": [],
    "kT": [],
    "aT": [],
    "tT": [],
    "aM""",
    "sign""eJwdjU1KBDEQhe8yiyzzR/e0CFnIrASZnQcok+qZwk7SVCoDehYvIS48kZ7D4Op9PN7PARjhMQWrIggO8H5RkeTtDBnD7/fnz8eXSlQK8qn2Ig8iPFKq7kK5t1NNGJxVlelC5Zm3cBXZ270x7V1nJOlQdKzZDG5XMnHMG7XDZbSGsIzd4PxR7RvIWjkPm6m9PuENt8GtsgTVG/6f9k4pHFdv07LGF/R+WlyCdQLt5sXN891sJ+201fbwB3meSgc="
}

其中 ts 就是时间戳参数, cts = ts + 1000, sign(sign同样经过压缩+base64编码,用上面的解码函数能看到sign参数,sign参数基本都是一些get提交的参数,都可以在页面源码找到), 其它参数保持不变即可

3.测试结果

可以看到, 能够拿到正确的数据
至此,解析token和生成token的过程已经讲解完毕,如果你觉得笔者写得还不错,请点个赞!