【导语】我们在爬取数据中,会遇到字体乱码的下,其实是字体加密,本篇文章主要解决字体解密这种反爬方式。
1.在浏览器打开58同城网址进入北京租房
2.点击检查,找到房租价格对应位置,发现源码中价格部分是乱码,但是页面显示正常
3.得出结果这段代码是经过字体加密的
我们看到的如下:
那么,按F12查看源码,如下:
【解决思路】
字体加密一般是通过字体文件进行映射,所以我们只需要找到对应的字体文件,然后通过一些手段找到他们字体对应的映射关系就可以破解字体反爬
1、当我们发现字体反爬之后,首先可以找一下是通过哪一个类进行的字体映射,因为字体映射都会在具体的css样式上进行体现
2、我们可以先删除掉自身的一些样式,观察页面变化,当我们删除自身样式或者父类样式之后页面恢复了乱码,就可以确定是哪一个类进行的字体加密
3、通过加密样式寻找字体映射文件方式
字体加密一般是分为两种
①通过base64加密的字体文件,这种文件可以通过python的base64模块进行解密
②通过url的方式引入字体文件
以上两种我们都可以通过搜索对应的加密样式找到具体文件
首先可以在当前页面中搜索是否存在对这个类的定义
如果没有找到可以在network中全局搜索存在这个样式的css文件
找到加密文件之后无论是哪一种加密方式都可以通过python请求获取加密字体文件
4、获取加密文件的代码
通过正则表达式获取加密文件内容
获取到加密文件之后如果想要看里面的内容可以通过base64进行解密,并写入woff文件中
之后可以通过fontTools包将字体文件转为xml进行查看
import re
from fontTools.ttLib import TTFont
import base64
import requests
res = requests.get('https://bj.58.com/chuzu/?utm_source=market&spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT&PGTID=0d100000-0000-13e1-612a-4575bfeb5389&ClickID=2')
bs64 = re.findall(';base64,(.*?)\&