字体加密 | 字体加密初认识_咸鱼学 Python的博客-程序员宅基地

字体加密初认识

不少网站都使用了字体库对数据进行加密,即页面源码中的数据与显示出来的数据不同。

实现的效果和昨天发布的那篇关于 X 薯中文网的效果类似,但是原理大不相同。

Python爬虫进阶必备 | X薯中文网加密分析

在字体加密的网站中用户也是无法直接进行复制网页内容的。

目前有使用字体加密的网站大概有下面这些:

58同城,起点,猫眼,大众点评,启信宝,天眼查,实习僧,汽车之家

既然这么多的网站都采用了字体加密,那么它一定是一个有效的反爬手段,作为爬虫工程师我们应该如何应对呢?

首先我们应该先了解一下什么是字体加密。

什么是字体加密?

网页字体是一个字形集合,而每个字形是描述字母或符号的矢量形状。

因此,特定字体文件的大小由两个简单变量决定:每个字形矢量路径的复杂程度和特定字体中字形的数量。

通俗一点,同一内容的网页字体每个字形应该都是大同小异的,我们可以通过比对字体文件的字形来确认映射的内容。

关于字体加密的描述文章实在太多了,个人建议还是看看 Google 官方关于网页字体的文章。

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization?hl=zh-cn

接着是关于网页字体加密映射的原理图,下图来自谷雨解字:

https://guyujiezi.com/

在爬虫爬取页面的时候,页面中的代码是阴书,但是在人眼看到的是原文,这样的映射关系让爬虫无法顺利爬取到网站内容。

如何处理字体加密?

通过上面的字体加密原理图,我们大概了解到字体加密的原理。

我推荐没有搞过字体加密的朋友找个比较简单的网站练手,网上写的比较多的例子是猫眼的专业版。

猫眼的字体解密文章非常多,建议没有接触过得朋友可以先自己动手试试,咸鱼也会在之后更新字体解密系列的文章。

下面是字体解密的大致流程:

  • 先找到字体文件的位置,查看源码大概就是xxx.tff这样的文件

  • 重复上面那个操作,将两个字体文件保存下来

  • 用上面的软件或者网址打开,并且通过 Python fontTools 将 tff 文件解析为 xml 文件

  • 根据字体文件解析出来的 xml 文件与类似上面的字体界面找出相同内容的映射规律(重点)

  • 在 Python 代码中把找出的规律实现出来,让你的代码能够通过这个规律还原源代码与展示内容的映射(这句话比较抽象,可以之后结合代码文章再读一遍)

字体解密相关资源

咸鱼这里直接上资源的链接。

一是查看字体的软件 FontCreator,支持 window 。

链接:https://pan.baidu.com/s/1tUznnSB3siI2rVY9Whv88A  密码:ygz9

二是打开字体的网站,适合 mac 系统的朋友使用。

先通过 cloudconvert 把字体文件转化为 svg 后再用 fontello 打开查看

http://fontello.com/

https://cloudconvert.com/ttf-to-svg

如果嫌弃上面转换太过麻烦可以用百度字体打开。

http://fontstore.baidu.com/static/editor/index.html

咸鱼推荐使用 FontCreator 以及百度字体。

打开后显示的样子与下图类似。

EOF

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43189702/article/details/102927834

智能推荐

全连接神经网络(DNN)处理多分类任务_dnn多分类_waitingwinter的博客-程序员宅基地

我们采用 python tensorflow1.14 来处理多分类问题.给定一个数据集,并对其可视化有import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltimport time# set seednp.random.seed(1234)tf.set_random_seed(...

html flv直播代码,html中嵌入flv格式文件的代码_曈漾的博客-程序员宅基地

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" height="120" width="190">value="http://www.jb51.net/player/vcastr22.swf?vcastr_file=http://img.jb51.n...

Curator的简单封装使用_恐龙弟旺仔的博客-程序员宅基地

前言: 闲来无事,想起把zookeeper的相关知识再补充一下。作为中间件部门的成员,与zookeeper打交道的机会还是很多的。目前市面上的很多产品,尤其是分布式相关的,基本都会用上zookeeper。 本文不是一篇介绍zookeeper是什么和怎么使用的文章,而是介绍zookeeper的使用框架Curator的。本来笔者还想着把Curator的使用再好好熟悉下,因为一段时间...

red hat linux 5下载地址,Red Hat Enterprise Linux AS 5 下载地址及安装号码_普通网友的博客-程序员宅基地

红帽子企业Linux 5安装序列号Server:* Red Hat Enterprise Linux (Server including virtualization):2515dd4e215225dd+ Red Hat Enterprise Linux Virtualization Platform:49af89414d147589 Client:* Red Hat Enterprise Lin...

openlayers基础用例_weixin_30649859的博客-程序员宅基地

http://weilin.me/ol3-primer/ch03/03-01.html#http://weilin.me/ol3-primer/ //地址http://openlayers.org/ //OpenLayers官网 vue安装自定义坐标系npm install proj4 import * as proj4 from "proj4"; or// import proj4 f...

List转String学习感受_list转string效率_AlexZ分不清堆栈的博客-程序员宅基地

工作中经常需要做一个List<String>转成一个用“,”隔开的String类型,一开始只是使用别人编写的StringUtils中listToString方法代码如下/** * 将字符串的集合用逗号间隔拼接为字符串 * @param strList 字符串的集合 * @return */ public static Stri...

随便推点

伸缩布局flex、背景缩放实例、字体阴影—携程网手机app_何迟的博客-程序员宅基地

要点:1.将需要伸缩布局的父级元素添加display:flex显示效果,在子级元素中设置flex的值,然后按比例分。如一个子集元素是1,另一个是2,则一个占三分之一,另一个三分之二。2.字体阴影非常占内存,不建议使用3.背景图片的缩放,可以为px和百分比(如果自定义一个,另一个按原来图片的比例等比列缩放)   另两个特殊的属性值,cover将图片等比例缩放,直到图片的高跟盒子的高一...

TensorFlow学习笔记(二)---MNIST代码分析_阳光下的Smiles的博客-程序员宅基地

TensorFlow学习笔记(二)---MNIST代码分析1、mnist_softmax.py全部 代码如下:"""A very simple MNIST classifier.See extensive documentation athttp://tensorflow.org/tutorials/mnist/beginners/index.md"""fr

MIUI 强制跳过 关闭 打开 小米手机 USB安装 USB安全 USB安全设置 应用确认_z920981023的博客-程序员宅基地

MIUI 强制跳过 关闭 打开 小米手机 USB安装 USB安全 USB安全设置 应用确认一、背景和结论众所周知,小米手机开启 USB 安装功能,需要插入 SIM 卡登陆、需要登小米账号。我这台手机已root,懒得登陆了,就准备通过修改文件的方式来开启相关功能,还真做到了。关键词:root,无需 xposed,无需 frida。测试环境:miui9、miui10、miui11。二、无需 SIM卡和小米账号,开启USB相关功能方法:编辑配置文件和 SystemProperties,使.

echarts饼图属性设置-饼图中间设置总和_饼图中间显示合计_JackieDYH的博客-程序员宅基地

源码option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, legend: { orient: 'vertical', left: 'left', data: ['上海', '广州', '中原', '西北', '浙江', '江苏'], orient:"hori...

Qt下Armadillo矩阵函数库的添加_qt armadillo_sandeepin的博客-程序员宅基地

其实本文严格说只能算VS2013添加Armadillo教程,因为为了省事,用的是VS2013编译器版本的Qt,Armadillo也直接用了自带例子中的blas_win64_MT.dll、blas_win64_MT.lib、lapack_win64_MT.dll、lapack_win64_MT.lib,没有完整编译Armadillo,仅是调用举例。版本信息:  qt-opensource

Hibernate(九)_weixin_30301183的博客-程序员宅基地

三套查询之SQL查询Native Sql Query原生的sql查询.要求写sql语句.SQLQuery 是 Query的子类1.查询所有的学生 1 //1.查询所有的学生 2 @Test 3 public void test1(){ 4 SQLQuery sqlQuery = session.createSQLQuery("se...

推荐文章

热门文章

相关标签