glidedsky之爬虫-字体反爬-1

186 阅读1分钟

image.png 由于之前没注意蓝色方框提示,一直在琢磨woff字体,一顿操作,掉了一地头发。。。 好了,言归正传

找字体文件

既然题中已给提示,那就按照提示,找字体文件

image.png 将base64字符串解码,然后保存成ttf文件

def gen_font(bs64_str):
    font_content = base64.b64decode(bs64_str)
    with open('./trans.ttf','wb') as f:
        f.write(font_content)

找xml标签和数字的映射关系

由于作者mac系统,无法安装fontcreator,所以在此只能对ttf文件转xml,然后读取xml字体信息

def ttf_xml(file_path):
    font = TTFont(file_path)
    font.saveXML(file_path.split('/')[-1].replace('ttf','xml'))

打开xml文件,由两部分需要注意,一个是GlyphOrder标签,一个是TTGlyph标签,基本都是长这样

image.png image.png 我们就是要从这里,找出标签和数字的映射关系。 现在,我们回到页面来看

image.png 页面源代码里显示的是59,但是网页上面显示的却是91,很显然是加载字体的缘故,这里我们先将字体中的字先画出来看看,找找其中的关系:

image.png contour标签中的一对对(x,y)坐标点,大胆推测就是用来描绘字体用的,所以我们使用matplotlib将其画出,发现 对应的数字为9,对应的数字为1, 所以对应关系为

image.png 至此,字体反爬基本解开了。 注:每一页都得生成新的ttf,产生新的映射关系,然后替换。