Python字体反爬实战案例分享
作者:梦想橡皮擦 发布时间:2021-06-18 01:00:46
标签:Python,字体,反爬
实战场景
本篇博客学习字体反爬,涉及的站点是实习 x,目标站点地址直接百度搜索即可。
可以看到右侧源码中出现了很多“乱码”,这其中就包含了关键信息。
接下来按照常规的套路,在开发者工具中检索字体相关信息,但是筛选之后,并没有得到反爬的字体,只有一个 file?
有些许的可能性。
这里就是一种新鲜的场景了,如果判断不准,那只能用字体样式和字体标签名进行判断了。
在网页源码中检索 @font-face
和 myFont
,得到下图内容,这里发现 file
字体又出现了,看来解决问题的关键已经出现了。
下载文件名之后发现无后缀名,我们可以补上一个 .ttf
的后缀,接下来拖拽到 FontCreator 中,然后进行查阅。
二次刷新页面之后,再次获取一个 file
文件,查看二者是否有编码变化问题。
结论:每次请求字体文件,得到的响应无变化。
既然没有变化,后续的字体反爬实战编码就变的简单了。
实战编码
解析字体文件,获取编码与字符。
from fontTools.ttLib import TTFont
font1 = TTFont('./fonts/file.ttf')
keys,values = [],[]
for k, v in font1.getBestCmap().items():
print(k,v)
得到的结果如下所示:
2 extra bytes in post.stringData array
120 x
57345 uni4E00
57360 uni77
57403 uni56
……
然后我们查看一下实习僧站点返回的数据。
-
这其中又涉及到了编码的转换。
我们拿到一段带编码的文字,如下所示:
销售实习
接下来查看一下页面呈现的文字
SaaS软件销售实习生
其中 
对应的是 S
字符,再看一下该字符在字体文件中的编码,如下所示。
但是从刚才的结果中,并未得到 edb3
相关值,但是把十进制的编码进行转换之后,得到下述结果。
来源:https://blog.51cto.com/cnca/5349671


猜你喜欢
- 1、获取对象类型,基本类型可以用type()来判断。>>> type(123)<class 'int'
- 无意中在csdn上看到一帖有关绘制杨辉三角的sql表达式,感觉很有意思。后来自己想下不借助临时表,根据杨辉三角的组合数计算方法C(n,m)=
- 1、生成配置文件''' 生成配置文件'''import configparse
- 引言在学习mysql时,我们经常会使用explain来查看sql查询的索引等优化手段的使用情况。在使用explain时,我们可以观察到,ex
- 本文实例讲述了Python将名称映射到序列元素中的方法。分享给大家供大家参考,具体如下:问题:希望通过名称来访问元素,减少结构中对位置的依赖
- 不得不说python的自制包的相关工具真是多且混乱,什么setuptools,什么distutils,什么wheel,什么egg!!怎么有这
- 今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞库里面的信息,一看960多个要整理到什么时候才结束。所以我决定写个爬
- 要调用RPC接口,python提供了一个框架grpc,这是google开源的rpc相关文档:https://grpc.io/docs/tut
- (1)设计一个算法,确定两个矩形是否相交(即有重叠区域) (2)如果两个矩形相交,设计一个算法,求出相交的区域矩形 (1) 对于这个问题,一
- 线性判别分析(linear discriminant analysis),LDA。也称为Fisher线性判别(FLD)是模式识别的经典算法。
- 下表列出了 Microsoft ACCESS 的命令行选项:选项 效果database 打开指定的 Microsoft Access 数据库
- List:1. 什么叫商品评论?2. 评论体系的存在意义3. 评论体系的现状4. 都有哪些元素5. 该如何设计?6. 评论体系之外1.什么叫
- 这个操作在numpy数组上的操作感觉有点麻烦,但是也没办法。例如 a = [[1,2,3], [4,5,6], [7,8,9]]取 a 的
- python具体强大的库文件,很多功能都有相应的库文件,所以很有必要进行学习一下,其中有一个ftp相应的库文件ftplib,我们只需要其中的
- 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数。 2. 使用Function对象来进行返
- 我们很容易用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是: 这两个函数所产生的T
- 一、时间日期基本介绍时间日期类型在Python中主要有两个模块:time模块 和 datetime模块time模块: 是基于Unix Tim
- 一、准备阶段 获取私钥官方文档 https://kf.qq.com/faq/161222N...获取私钥证书的序列号 https:
- 概况在开发过程中,我们一般直接用Python命令直接运行Flask程序。这样的运行只适合我们开发,方便我们调试。一旦程序部署到线上,这样运行
- using System;using System.Collections.Generic;using System.Text;using