glidedsky字体反爬2

本文详细解析了如何处理http://glidedsky.com/level/crawler-font-puzzle-2网站的字体反爬虫难题,包括找到并解密字体文件,转换为ttf格式,解析为xml,最终找到数字与中文之间的映射规则。

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

爬取网站:http://glidedsky.com/level/crawler-font-puzzle-2

在这里插入图片描述

说下这个网站吧,个人感觉难度还是挺大的,是个很好的爬虫练手网站

字体反爬主要思路:**找到加密字体的文件 --> 保存为ttf格式文件 --> 用字体编辑器查看是加密字体 --> 解析ttf,保存为xml文件 --> 分析xml文件,找到对应规则 -->按照规则解析源码
**

那接下来先看下这些加密字体到底有多折磨人吧@_@
在这里插入图片描述

可以看到页面上显示了很奇怪的数字,并且源码上对应的也是毫无相关的中文,那么现在已经可以断定是字体反爬了

第一步:找到加密文件
查看源码可以看到font-family下面有一长串的字符串,通过格式可以看出这是base64加密,先解密拿到字体加密文件
在这里插入图片描述

    # 获得base64编码文件
    soup = BeautifulSoup(v_repose.text, "html.parser")
    html = str(soup.select('style'))
    str_base64 = html.split('base64,',1)[1]
    font_face_base64 = str_base64.split(') format', 1)[0]
    # base64 解密
    base64_file = base64.b64decode(font_face_base64)

第二步: 保存为ttf格式文件

    with open('ttf_data/'+str(k)+'.ttf', 'wb') as f:
        f.write(base64_file)
    #解析ttf,保存为xml
    font = TTFont('ttf_data/'+str(k)+'.ttf')

第三步:用字体编辑器查看是加密字体
在这里插入图片描述
可以看到0-9都有对应的unicode编码,先解码看下到底是什么
在这里插入图片描述
那么现在大概的思路应该出来了,0-9对应的unicode编码与源码的中文应该是形成一一对应关系

第四步:解析ttf,保存为xml文件

    # 转为 xml 格式文件,并保存
    font.saveXML('xml_data/'+str(k)+'.xml')

第五步:分析xml文件,找到对应规则

在这里插入图片描述

这是0-9对应的编码

在这里插入图片描述
这是中文对应的编码

那么总体思路就是:从源码获取每个数字对应的中文,然后解码,利用这个unicode在xml文件中找到与其对应的编码,然后再利用这个编码找到0-9数字(可能有点绕,多看几遍xml文件和源码应该就捋清楚了)

应网站要求,这里就不贴代码了,希望有心人都能通过这一关,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值