爬虫 解析 加密字体 例子58 同城

一些网站 会将部分内容进行加密,防止爬虫简单的获取到信息
最近 在爬取58同城的品牌公寓时 遇到租房信息里的价格 爬下来是看不懂的字体

爬虫 解析 加密字体 例子58 同城_第1张图片
一些数据在浏览器里面显示是正常的, 但是渲染前和渲染后的html源码都看不到字体, 渲染前看到的是16进制的4位字符, 渲染后看到的是一些方块.
然后分析了一下网站的源码,发现他是由base64 加密之后生成的字体
爬虫 解析 加密字体 例子58 同城_第2张图片
那我们就可以通过正则匹配出来进行处理
首先在html源码里面找到woff字体的base4编码, 保存成”font.woff”字体文件, 用fontTools库将这个字体文件存储为”font.xml”文件.
在这里插入图片描述
爬虫 解析 加密字体 例子58 同城_第3张图片

爬虫 解析 加密字体 例子58 同城_第4张图片
然后在xml里面找到TTGlyph字段, 这个字段下面的 子字段都是用来画字符(包括中英文数字)的坐标. 同一个字符的坐标是一样的. 解析xml, 然后把这些坐标的属性字典按顺序都存到一个list里面, 然后序列化成json(加sort_keys=True参数)字符串. 用这个字符串当key, value是实际的字符, 存成一个constant_dict. 每次遇到新网页, 取出这个字符串, 然后根据字符串从constant_dict获取实际的字符.

我们也可以借助一个FontCreator 软件 将font.woff”字体文件查看
爬虫 解析 加密字体 例子58 同城_第5张图片
每个字体都对应了一个uni字符,和上面方法一样序列化成json(加sort_keys=True参数)字符串. 用这个字符串当key, value是实际的字符, 存成一个constant_dict. 每次遇到新网页, 取出这个字符串, 然后根据字符串从constant_dict获取实际的字符.

但是 事实并没有这么简单 ,它的每个网页都是变化的 对应关系并不是完全一致。所以这个时候我们就可以借助tesseract工具 来识别字体。
爬虫 解析 加密字体 例子58 同城_第6张图片

这个例子还是相比较简单点的,我们还可以根据每个字符的点阵,找出对应关系,但是如果字体样子改变,对应关系也就乱了。

你可能感兴趣的:(爬虫,加密字体)