字体反爬详解

目前网页的字体多样化完全可以自定义,常见有eot,woff,ttf格式类型

本次爬虫就针对以woff格式的字体而言:

先看看不做措施造成的影响:

http://maoyan.com/ 以猫*票房信息为例

调试模式下票房数字是乱码的,在源代码中则是“&#xxxxx”的一窜字符

 

 

故,不做措施直接爬取的数据是乱码的,就是调试模式中看的内容

 

怎么做

 

在源码中我们可以看到有woff的踪迹

这个woff的连接就是该网站数字采用的字体,我们要解析就必须下载该字体

下载下来后,我们可以借助font creator工具打开woff查看样式

可以看到两个部分,uniE5B3 对应着6,其实将uniE5B3做一些处理比如去掉uni后,剩下的4位就是源码里的&#xE5B3,可是代码并不知道这个对应的就是6,

而且,我们发现一个问题,就是这个woff文件并不是唯一的,每次刷新网站,再次查看源码时,woff文件是不一样的,也就说明数字6并不是只有一个uniE5B3相对应

我们将多个woff文件下载下来转换成xml格式做个对比

怎么转换呢,可以借助TTFont库

 

我们打开xml比较,发现坐标相同数字的xy是不变的

所以,在保存一个woff文件作为bsaefonts的情况下,下载爬取网站的woff文件,匹配坐标不变对应的uniXXXX,来取出正确的数字

下载第一份woff作为basefonts,并将uniXXXX和对应的数字记录到base_fonts和base_nums中,而实际爬取中的woff作为onlinefonts

我们要对比坐标xy即字体轮廓,来判断数字的取值

依次循环比较ffont['glyf'][name]即可,这里的name就是字符集编码unixxxx

若两者的轮廓相等,即可以做替换,将base_fonts对应的base_num替换给源码页面中的字符“&#xXXXX”(暂且称之为源码符),这里将所有能构成的0-9的源码符和对应的正确数字做成字典,后续爬取出来的,用字典替换即可

完整代码:

点击下载完整代码

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值