我去!爬虫遇到字体反爬,哭了

  • A+
所属分类:安全闲碎
来自公众号:Python研究者

大家好,我是辰哥


今天准备爬取某某点评店铺信息时,遇到了字体反爬。比如这样的:


我去!爬虫遇到字体反爬,哭了


还有这样的:


我去!爬虫遇到字体反爬,哭了


可以看到这些字体已经被加密反爬


竟然遇到这种情况,那辰哥就带大家如何去解决这类反爬(字体反爬类


01


网页分析



在开始分析反爬之前,先简单的介绍一下背景(爬取的网页)


我去!爬虫遇到字体反爬,哭了


辰哥爬取的某某点评的店铺信息。一开始查看网页源码是这样的


我去!爬虫遇到字体反爬,哭了


这种什么也看不到,咱们换另一种方式:通过程序直接把整个网页源代码保存下来

我去!爬虫遇到字体反爬,哭了


获取到的网页源码如下:


我去!爬虫遇到字体反爬,哭了



比如这里看到评论数(4位数)都有对应着一个编号(相同的数字编号相同),应该是对应着网站的字体库


下一步,我们需要找到这个网站的字体库。


02


获取字体库



这里的字体库建议在目标网站里面去获取,因为不同的网站的字体库是不一样,导致解码还原的字体也会不一样。


1、抓包获取字体库


我去!爬虫遇到字体反爬,哭了


在浏览器network里面可以看到一共有三种字体库。(三种字体库各有不同的妙用,后面会有解释


我去!爬虫遇到字体反爬,哭了


把字体库链接复制在浏览器里面打开,就可以把字体库下载到本地。


2、查看字体库


这里使用FontCreator的工具查看字体库。

下载地址:

https://www.high-logic.com/font-editor/fontcreator/download



这里需要注册,邮箱验证才能下载


安装之后,把刚刚下载的字体库在FontCreator中打开


我去!爬虫遇到字体反爬,哭了


可以看到字体的内容以及对应的编号


比如数字7对应F399数字8对应F572 ,咱们在原网页和源码对比,是否如此???


我去!爬虫遇到字体反爬,哭了


可以看到,真是一模一样对应着解码就可以还原字体。


3、为什么会有三个字体库


我去!爬虫遇到字体反爬,哭了


在查看加密字体的CSS样式时,方式有css内容是这样的


我去!爬虫遇到字体反爬,哭了

字体库1:d35c3812.woff 对应解码class为 shopNum

字体库2:084c9fff.woff 对应解码class为 reviewTag和address

字体库3:73f5e6f3.woff  对应解码class为 tagName


也就是说,字体所属的不同class标签,对应的解密字体库是不一样的,辰哥这里不得不说一句:太鸡贼了


我去!爬虫遇到字体反爬,哭了


咱们这里获取的评论数,clas为shopNum,需要用到字体库d35c3812.woff



我去!爬虫遇到字体反爬,哭了



03


代码实现解密


1、加载字体库


既然我们已经知道了字体反爬的原理,那么我们就可以开始编程实现解密还原。


加载字体库的Python库包是:fontTools ,安装命令如下:


pip install fontTools


我去!爬虫遇到字体反爬,哭了

将字体库的内容对应关系保存为xml格式


我去!爬虫遇到字体反爬,哭了


code和name是一一对应关系


我去!爬虫遇到字体反爬,哭了


我去!爬虫遇到字体反爬,哭了


可以看到网页源码中的编号后四位对应着字体库的编号。


因此我们可以建立应该字体对应集合


我去!爬虫遇到字体反爬,哭了


建立好映射关系好,到网页源码中去进行替换



我去!爬虫遇到字体反爬,哭了


我去!爬虫遇到字体反爬,哭了


这样我们就成功的将字体反爬处理完毕。后面提取内容大家基本都没问题。



2、完整代码


我去!爬虫遇到字体反爬,哭了

输出结果:


我去!爬虫遇到字体反爬,哭了


可以看到加密的数字全部都还原了。


04


小结



辰哥在本文中主要讲解了如此处理字体反爬问题,并以某某点评为例去实战演示分析。辰哥在文中处理的数字类型,大家可以尝试去试试中文如何解决。


--- EOF ---


推荐↓↓↓

本文始发于微信公众号(Python编程):我去!爬虫遇到字体反爬,哭了

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: