python反爬虫之FontTools库的使用
字体反爬虫也是我们常见的一种反爬手段,字体的加密使返回的网页代码内容中我们想要的信息部分看不到,即使看到了,也是其他格式的内容。但我们可以找到字体地址,把字体下载下来然后用FontTools就能解决问题。以起点中文网为例。
首先我们请求首页的url地址,可以发现重要的数据是用方块显示的,如下:
这就很难受了。字体加密当然会有请求字体文件的。所以就找字体文件。
在字体数据的下方竟然有字体文件的地址,这就又很轻松了。
用正则表达式匹配出字体的地址即可。
font_url = re.findall(r"src: url\('(.*?)'\)", html)[1] # 提取woff字体文件
成功拿到字体地址。
接下来就是请求字体地址,保存字体文件。
# 请求字体文件地址
font_resp = requests.get(font_url)
# 保存字体文件
with open('字体文件.woff', 'wb') as f:
f.write(font_resp.content)
保存到本地的字体文件,我们是看不懂的,借助FontTools转换为xml形式的文件,我们就能找到其中的规律。
# TTFont打开字体文件
font = TTFont("字体文件.woff")
# 将字体文件保存为可读的xml文件
font.saveXML('font.xml')
# 找字体的映射关系,字体的映射关系在cmap中体现
font_map = font['cmap'].getBestCmap()
print(font_map)
在保存的xml文件中,我们可以找到其中的映射关系,如图:
同时打印的映射关系为: