glidedsky字体反爬2

tech2022-07-31  125

爬取网站: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文件和源码应该就捋清楚了)

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

最新回复(0)