”仅限学术交流,如有冒犯请联系作者删除“
查看页面
看到它的字体都是一些小框框这就是所谓的字体反爬
这个时候我们如果用爬虫去爬的话爬下来的都是一些 这样的怪字符(此处可以直接打开页面源码直接看到)这个和以前的反爬就不同了
一般像这种字体反爬我遇见过的有的是只需做一些简单的替换,还有的就是内部包含了字体文件(.woff,.ttf)等,一般在控制台点击Font然后刷新页面就会出现字体文件
既然已经知道了是由这个字体文件作怪,那么就将这个字体文件下载下来看看,下载下来之后利用工具点击链接:百度工具
打开字体库,可以很直观的看到字体映射关系
但是这个woff文件的字体库是会随机更新的,至于怎么判断它是否更新呢,我们就需要写一套代码让它通用的自动来匹配,首先分析woff文件的url,假设内容变化它的url也会发生变化,为了证明我们的猜测我们需要先获取它的url,一般像这种字体反爬它的url通常都是在源码当中我们通过查看源码搜索woff发现没有,这时候我们再去观察我们看到woff文件的控制台,发现Referer里有一个css链接
在源码中找到css链接打开之后就可以看到woff链接在里边,不过里边有很多链接不确定是哪一个,这时我们再去观察页面标签的class属性有两个address和num很直观就是一个汉字的一个是数字的而且与我们打开的字体文件相对应,这样就可以获取它的字体文件
标签的class
相对应的woff
Python 获取 woff 的内容
pip install fontTools
安装相应模块 这个库可以对 woff 文件进行读取
font = TTFont('woff/' + name + '.woff')
uni_list = font['cmap'].tables[0].ttFont.getGlyphOrder()
读取出的内容
把它的映射关系写进列表进行拼接
因为这套字体会随机变动,所以我们需要先将字体进行存储,采用Redis Hash存储
方案:
因为它有数字和汉字两种不同的字体反爬,所以我们需要建立一个关于数字的 Hash 存储一个关于汉字的 Hash 存储,将字体库同步到 redis 中,根据字体库进行判断,如果出现新的字体库就会自动提取到redis中,如果字体库是旧的那就就直接从旧字体库取出对应值
hash 的 key 为字库名(key 就是字体文件url后缀,如果字体库发生改变那么url也会发生改变), 值为字库映射表
本文只获取大众点评商铺地址和电话信息
GitHub链接