关于大数据:快手爬虫-解决粉丝数-关注数等字体加密

54次阅读

共计 1654 个字符,预计需要花费 5 分钟才能阅读完成。


想拿一下粉丝数 关注数 形容等
发现字体是加密的 elements 是这样的

源代码里是这样的

找了找 js 原来是用



这些玩意 去

这个 ttf 里一一对应 而后用 js + css 画进去的
找到问题所在,就 fuck 掉它
把 js 扣进去?用 execjs 去执行?太 LOW 了
既然做 python 那就用 python 去重写
首先用 re 去拿这个 ttf 的 url (因为每次都变)

先给这玩意下载下来 把这个 ttf 文件扔 fonteditor 里 而后去
http://fontstore.baidu.com/static/editor/index.html
瞅瞅

这个时候就发现了货色


不就是这玩意吗,找到对应关系了 那就 ok 了
TTF 文件没方法间接搞啊?怎么办
保留成 xml !


而后就成了这玩意 ok 对应关系也有了 python 也能搞了
去写一下 整逻辑就是
先去拿 ttf 文件 url 申请 url 保留 而后转 xml
而后 拿加密前的特殊字符

# 就是这玩意


而后去切割 对应 OK 完事
对应关系的代码
依据看到的 id : 0 啥也不说
从 1~15 就是这些货色

上代码

# 对应关系 

def kuaishou_un_font(soup, font_size):
    # soup 就是传的 ttf 转码成 xml 的
    font_dict = {}
    for font_m in soup.glyphorder.children:
        if font_m != '\n' and 'humans' not in font_m:
            id = font_m.get('id')
            name = font_m.get('name')
            if id != '0' and int(id) < 11:
                font_dict[name] = str(int(id)-1)
            elif id == '11':
                font_dict[name] = '.'
            elif id == '12':
                font_dict[name] = 'w'
            elif id == '13':
                font_dict[name] = 'k'
            elif id == '14':
                font_dict[name] = 'm'
            elif id == '15':
                font_dict[name] = '+'

    size_dict = {}
    for font_k in soup.cmap_format_4.children:
        if 'map' in str(font_k):
            code = font_k.get('code')[-4:]
            name = font_k.get('name')
            size_dict = name
    return font_dict[size_dict[font_size]]

而后是拿 TTF 文件而后转成 xml

# TTF 转 XML
 font = TTFont('font_size.ttf')
  font.saveXML('font_size.xml')

和 split 后 list 去一一解密

# font_url 本人去动静拿 每次都变动
font_url = ''
font_res = requests.get(font_url)

  with open('font_size.ttf', 'wb+') as f:
      f.write(font_res.content)

  font = TTFont('font_size.ttf')
  font.saveXML('font_size.xml')
  soup = BeautifulSoup(open('font_size.xml'), 'lxml')
  try:
      fan = user_data_json['obfuseData']['fan'][40:-8].split(';&#x')
      fans = ''
      for f in fan:
          fans += kuaishou_un_font(soup, f)
  except:
      fans = ''

最初

OK~ 解码实现

——————————————————————————————————————————

TiToData:业余的短视频、直播数据接口服务平台。

更多信息请分割:TiToData

笼罩支流平台:抖音,快手,小红书,TikTok,YouTube

正文完
 0