鱼C论坛

 找回密码
 立即注册
查看: 1974|回复: 2

提取内容

[复制链接]
发表于 2022-7-23 16:05:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好,这段代码打印出resp.text之后,怎么提取出评论信息呢,为什么打印出来的东西看着像字典,一层一层的,但是确是字符串呢,能解释一下这 个字符串的结构吗,
就是说是里面还可以放类似于的字典里的内容吗

  1. from Crypto.Cipher import AES
  2. from base64 import b64encode
  3. import requests
  4. import json
  5. import re

  6. url = "https://music.163.com/weapi/comment/resource/comments/get?csrf_token="

  7. # 请求方式是POST
  8. data = {
  9.     "csrf_token": "",
  10.     "cursor": "-1",
  11.     "offset": "0",
  12.     "orderType": "1",
  13.     "pageNo": "1",
  14.     "pageSize": "20",
  15.     "rid": "R_SO_4_1325905146",
  16.     "threadId": "R_SO_4_1325905146"
  17. }
  18. #处理加密过程 windoe.acrsea(的d,e,f,g)函数
  19. #d:data,e:到控制台去尝试,找出返回值
  20. # 服务于d的
  21. f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
  22. g = "0CoJUm6Qyw8W8jud"
  23. e = "010001"
  24. i = "d5bpgMn9byrHNtAh"  # 手动固定的. -> 人家函数中是随机的

  25. def get_encSecKey():  # 由于i是固定的. 那么encSecText就是固定的.  c()函数的结果就是固定的
  26.     return "1b5c4ad466aabcfb713940efed0c99a1030bce2456462c73d8383c60e751b069c24f82e60386186d4413e9d7f7a9c7cf89fb06e40e52f28b84b8786b476738a12b81ac60a3ff70e00b085c886a6600c012b61dbf418af84eb0be5b735988addafbd7221903c44d027b2696f1cd50c49917e515398bcc6080233c71142d226ebb"


  27. # 把参数进行加密
  28. def get_params(data):  # 默认这里接收到的是字符串
  29.     first = enc_params(data, g)
  30.     second = enc_params(first, i)
  31.     return second  # 返回的就是params


  32. # 转化成16的倍数, 位下方的加密算法服务
  33. def to_16(data):
  34.     pad = 16 - len(data) % 16
  35.     data += chr(pad) * pad
  36.     return data


  37. # 加密过程
  38. def enc_params(data, key):
  39.     iv = "0102030405060708"
  40.     data = to_16(data)
  41.     aes = AES.new(key=key.encode("utf-8"), IV=iv.encode('utf-8'), mode=AES.MODE_CBC)  # 创建加密器
  42.     bs = aes.encrypt(data.encode("utf-8"))  # 加密, 加密的内容的长度必须是16的倍数
  43.     return str(b64encode(bs), "utf-8")  # 转化成字符串返回,


  44. # 处理加密过程
  45. """
  46.     function a(a = 16) {  # 随机的16位字符串
  47.         var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
  48.         for (d = 0; a > d; d += 1)  # 循环16次
  49.             e = Math.random() * b.length,  # 随机数 1.2345
  50.             e = Math.floor(e),  # 取整  1
  51.             c += b.charAt(e);  # 去字符串中的xxx位置 b
  52.         return c
  53.     }
  54.     function b(a, b) {  # a是要加密的内容,
  55.         var c = CryptoJS.enc.Utf8.parse(b) #  # b是秘钥
  56.           , d = CryptoJS.enc.Utf8.parse("0102030405060708")
  57.           , e = CryptoJS.enc.Utf8.parse(a)  # e是数据
  58.           , f = CryptoJS.AES.encrypt(e, c, {  # c 加密的秘钥
  59.             iv: d,  # 偏移量
  60.             mode: CryptoJS.mode.CBC  # 模式: cbc
  61.         });
  62.         return f.toString()
  63.     }
  64.     function c(a, b, c) {   # c里面不产生随机数
  65.         var d, e;
  66.         return setMaxDigits(131),
  67.         d = new RSAKeyPair(b,"",c),
  68.         e = encryptedString(d, a)
  69.     }
  70.     function d(d, e, f, g) {  d: 数据,   e: 010001, f: 很长, g: 0CoJUm6Qyw8W8jud
  71.         var h = {}  # 空对象
  72.           , i = a(16);  # i就是一个16位的随机值, 把i设置成定值
  73.         h.encText = b(d, g)  # g秘钥
  74.         h.encText = b(h.encText, i)  # 返回的就是params  i也是秘钥
  75.         h.encSecKey = c(i, e, f)  # 得到的就是encSecKey, e和f是定死的 ,如果此时我把i固定, 得到的key一定是固定的,通过i找enkey来破解d
  76.         return h
  77.     }
  78.    
  79.     两次加密:
  80.     数据+g => b => 第一次加密+i => b = params
  81. """

  82. # 发送请求. 得到评论结果
  83. resp = requests.post(url, data={
  84.     "params": get_params(json.dumps(data)),
  85.     "encSecKey": get_encSecKey()
  86. })
  87. a = resp.text
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 22:22:35 | 显示全部楼层
贴一下你的打印结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-24 15:27:38 | 显示全部楼层
我猜你要爬一个api,它返回的json,就是字典套列表,套很多层。但是resp.text这个属性本身就是字符串,所以可以用eval(resp.text)转换成python里的字典
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 22:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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