python 爬虫之字体反反爬

爬虫常用来从某些网站抓取数据, 包括文字,图片等都可能作为爬取目标。通常情况下, 文字数据有更高的价值, 更容易进行后续分析, 所以有些网站就将关键数据以图片, 或者自定义字体形式来展示, 这样一来, 爬虫拿到的数据就会难以分析, 分析成本增高, 收益减少, 就可以降低爬虫制作者的积极性。对于图片, 由于网站需要保证正常用户的体验, 所以不会有太低的识别度, 用普通的ocr即可拿到真实文字数据, 而对于自定义字体形式的反爬措施, 爬虫往往拿到的是一堆我们难以直观分辨出意义的"乱码", 只有与特定的字体文件对照, 才能明白其意义, 所以我们就需要做三件事:

下载字体文件

分析字体文件, 确定编码和文字的对应关系

根据对应关系,完成转换

对于1, 简单情况下, 只需要找到@font-face, 直接通过其src字段指向的链接就可以得到字体文件, 但是更多的网站是不会采用这种方式的, 因为这种方式只要弄到一份字体文件, 确定一次映射关系, 爬虫就畅通无阻了, 根本无法提高爬取成本, 所以大多数网站是用 src: url("data:application/octet-stream;base64, *******")这种64位编码形式来传输字体文件给浏览器的, 这样就可以对每一个页面使用不同的字体文件(主要是不同的映射关系)。对于这种情况, 我们只需要对其base64字符串解码, 得到二进制码即可

1 import base64 2 from io import BytesIO 3 from fontTools import ttLib 4 5 6 class FontParser: 7 def __init__(self, b64str): 8 self._font = ttLib.TTFont( 9 BytesIO(base64.b64decode(b64str) 10 )

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzsxf.html