python字体反爬的一种解决方案
文章目录
版权声明
请注意:本文章为原创文章,未经本人许可,任何人不得转载和借鉴
问题
目前越来越多的网站升级了应对爬虫的反制手段和措施,网站使用自定义字体或者人们常说的字体反爬,就是其中一种。
描述
这里我们以某网站为例
打开某网站的某一篇政策文章,点击右键、打开检查,或者F12。
可以发现,【申报条件】这个板块里面的文字,和源代码里的文字完全不一样;
比如“申请企业应具备以下条件:”,代码里则对应为:“者合册第应具步以督法快:”;
即使你选中文字,再把它们复制出来,文字粘贴后依然为:“者合册第应具步以督法快:”。
解决方案
解决该问题的一种基本思路是:构建源字体与替换字体的对应关系
比如上文提到的句子:
者合册第应具步以督法快替换为申请企业应具备以下条件
其中: 者>申 | 合>请 | 册>企
假如我们能有这样的一个对应字典
change_font = {
'者': '申', '合': '请', '册': '企', ... , }
那么我们就能够将网站爬到的所有字体,都替换成正确的文字。
实操过程
1、找到网站的字体文件(ccw.ttf)
F12打开检查后,点击Network,刷新我们刚才访问的政策链接,在众多链接中,找到网站的字体文件链接
然后在浏览器中打开该链接,并保存到本地
2、使用百度字体编辑器
接下来,我们需要用到百度的在线字体编辑器,网址为:http://fontstore.baidu.com/static/editor/index.html
打开该网站后,点击左上角的打开,然后上传刚才保存的字体文件
打开后:
这时候我们就能看到网站字体和编码对应的关系
3、fontTools库
3.1
接下来我们使用python解析字体的常用库:fontTools
>>>from fontTools.ttLib import TTFont
>>>FONT_FILE = r'C:\Users\17337\Downloads\ccw.ttf'
>>>font_file = TTFont(FONT_FILE)
>>>for k, v in font_file['cmap'].getBestCmap().items():
>>> print(k, v)
33 ampersand
35 greater
36 c
37 asciitilde
38 H
40 q
41 S
.