hwt字体转换ttf_爬虫:如何优雅应对字体反爬

a3ddd752bd8cac212d0aa50ed706a2c9.png

目录

THE BEGIN

一 什么是字体反爬

二 如何解密

1.人工解密

2.工具解密

三 建立映射关系

四 解密


THE BEGIN

网页数据爬取可以简单分为三步:抓取页面,分析页面,存储数据。其中第一二步最为头疼,因为每个站点各有特色,你要不断检查网页结构寻找其规律,更不用说现在各种各样的反爬虫手段了。

一般来说,大多数网站会从三方面反爬虫:用户请求,如请求头检测;用户行为,如限制IP短时间频繁访问;网站加载方式,如Ajax异步加载。

今天来看看另一种常见反爬手段:字体反爬。

6fdadd969d96173d1dffe8639d45b9d8.gif

一 什么是字体反爬?

在这里有一个例子【实习僧】

大学生找实习求职招聘网站 | 实习僧​www.shixiseng.com
0a70cb311d2744792dd60b132fce21bc.png

进入官网,打开开发者模式,可以观察到关键信息在页面上显示正常,但是源码是乱码

f5c7c409261a18e8394f5a56f6de1ebd.png

365721895defe32183ec6532b4a57852.png

在这里,源代码中展示的并不是纯粹的数字,而是在页面使用了font-face定义了字符集,并通过unicode去映射展示。这对于正常访问的用户没有影响,因为浏览器会加载css中的font字体为用户渲染好,而对于爬虫来说却极其不友好,因为爬取下来的关键信息都是乱码。这在一定程度上起到了反爬虫的作用,因为数据被加密了!

e00ecaceded1ef87f9d0f03bb775ae71.png

那么,对于这种字体反爬该怎么处理呢?

二 如何解密

正如前文所说,反爬是通过字符集建立映射关系,将正常信息加密成一串乱码。那么首先,我们要找到这些映射关系在哪。

右键查看网页源码,查找font-face,可以看到字体信息密密麻麻一长串。

2e0e094de9af93de131f32acdad9997a.png

这些,就是我们所需要的信息了,接下来就是如何解密了。

在这里有两种方法可以解密

1. 人工解密

这种方法最简单,如果需要寻找的字符映射不多(如获取薪资,只有数字0-9)则可以通过观察网页寻找字符映射关系。当样本足够多时,你就可以自己建立一个映射表。

57afd53213759187e42dd1ef0db0ab15.png

不过这种方法不能长期使用,网站一旦更新字体映射就会失效,需要重新找规律。

2.工具解密

把上面的font-face这一段字符串爬取出来,可以看到这些字体源是用了base64加密,可以用base64库进行提取,把提取后的字体文件保存到shixi.ttf中。(ttf是字体的一种类型)

ttf文件无法直接打开,可以用软件FontCreator打开,然后查看每一个字符对应的编码。

73ce5fbc1eed29105de5db7e5d66c720.png

这里我们可以看到该网站加密了数字,字母、中文,足足100个,像第一种方法手动找规律肯定是行不通的。

当然,还有万能的python库,fontTools,可以用python代码来操作ttf文件。

这里我们用这个库来进行字体解密

三 建立映射关系

ttf文件无法直接打开,我们可以将其转换成xml文件,并观察有没有什么规律。

f871bcdda4c6b77c155ad773d1aadcdf.png

观察,cmap结点下存在对应关系,code所示即为网页上源码形式。但是用getBestCmap()函数获取后又变成十进制的数了,所以需要用hex()函数将10进制整数转换成16进制,以字符串形式表示成原来的行。另外第一行的map没有用,需要删除才能继续解析。

3e2471df921b9b3e641d8d4ceaf58b69.png
第一次替换

2e9647da42dafc94a60bfd4b2d6d0983.png
第三次替换

到此还没结束,观察站点,每个数据都有前缀&#x,所以我们还需进行前缀替换。至此,映射关系就建立好了。

f772752dcd32aaa4857144fa72f38cae.png
部分代码

四 解密

得到映射关系后,我们就可以用映射表对获取到的HTML源码进行清洗替换,之后就可以用爬虫正常爬取数据了。

ffefa0c5f0696ed784cf11e99555c110.png

这里观察页面结构,中规中矩,可以考虑用Beautiful Soup爬虫库进行爬取

2a2c4ea5cd0bc77ab52c138430c643b5.png

之后,就得到我们想要的数据了,清洗汇总就可以进行进行数据分析了。

dbfdfae4cf53ba2559fa98ce983322cd.png

最后

爬虫不易

前端工程师也不易

大家记得要文明爬虫

也欢迎大家关注我的公众号【数据自留地】

每周更多爬虫、数据分析干货

488a80829cd83cb888cf884fb844e74e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值