快手爬虫 解决粉丝数 关注数等字体加密 python快手爬虫

本文详细介绍了如何处理网页中加密的字体元素,通过分析JavaScript和CSS,利用Python重新实现解密过程。首先找到字体URL,下载TTf文件,将其转换为XML,然后使用正则表达式匹配加密字符。通过对应关系,解码加密的粉丝数关注数。整个流程清晰,代码逻辑明确,为类似问题提供了解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
想拿一下粉丝数 关注数 描述等
发现字体是加密的 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[code] = 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~ 解码完成 全部代码没放 因为是根据需求写的 懒得改成大家都能用的了 主要是给个思路 思路有了就很简单 需要的找我

Python中爬取快手或其他社交媒体平台上100万粉丝以上的博主信息通常涉及网络爬虫技术,这需要使用到诸如`requests`, `BeautifulSoup` 或者更高级的 `Scrapy` 等库。以下是简单的步骤概述: 1. **安装所需库**: 首先,你需要安装一些基础库,如`requests`用于发送HTTP请求,`lxml`或`bs4`(BeautifulSoup的不同版本)用于解析HTML。 ```bash pip install requests lxml ``` 2. **分析网页结构**: 访问快手博主列表页面,分析据加载的方式和可能存在的API接口(如果有的话)。如果没有直接的API,通常网站会通过JavaScript动态加载内容,这时可能需要用到像`Selenium`这样的工具配合浏览器模拟。 3. **编写爬虫脚本**: 使用`requests.get`获取初始页面的源码,然后用BeautifulSoup解析它找到包含博主信息的元素。可能需要查找包含用户ID、昵称、粉丝数等据的CSS选择器或XPath表达式。 ```python import requests from bs4 import BeautifulSoup # 获取首页HTML response = requests.get('https://www.kuaishou.com/author?follownum=1000000') soup = BeautifulSoup(response.text, 'lxml') # 查找并提取博主信息 blogger_list = soup.select('.follower_num > span') # 这里假设粉丝在CSS选择器中 for blogger in blogger_list: fan_count = blogger.text.strip() # 提取粉丝 nickname = blogger.parent.find('a')['title'] # 提取昵称 print(f"昵称: {nickname}, 粉丝: {fan_count}") ``` 注意,实际操作时可能遇到反爬机制、动态加载、加密等问题,可能需要调整或增加更多的处理逻辑。同时,请遵守网站的使用条款和robots.txt规则,并尊重隐私权。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值