破解字体加密,以58同城网站为例。

字体加密是爬取网页的过程中比较麻烦的问题。

字体加密一般是网页修改了默认的字符编码集,在网页上加载的他们自己定义的字体文件作为字体的样式,可以正确地显示数字,但是在源码上同样的二进制数由于未加载自定义的字体文件就由计算机默认编码成了乱码。

网站url  :    https://sh.58.com/chuzu/0/?PGTID=0d200001-0000-2b84-5b0c-434a2838407f&ClickID=1

一般来说,通用的解决办法是找到字体文件,分析文件中的映射关系。一般来说,字体文件都是作为样式加在加密字体的部位。

在样式中,我基本上都看完了, 从名字上看只有这个      fangchan-secret    最可能是字体加密文件。

在源码中Ctrl+F搜索    fangchan-secret   寻找字体加密文件

在58的源码中,字体文件是通过base64加密之后放在js里面了。把其中加密的部分取出,第一次是分析,在代码中可使用正则将其中的内容取出来。

58的字体加密文件每次网页刷新,其中的映射顺序会变,所以在不刷新的情况下,再复制一份

这里取第一条  1300   及其对应的乱码。

base64_str = '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'

price_code = '鸺齤齤'

首先进行  base64  解码,转化成为二进制形式,在方法中同时我也将字体文件写入了  otf  字体文件中。

def make_font_file(base64_string: str):

bin_data = base64.decodebytes(base64_string.encode())

with open('text.otf','wb') as f:

f.write(bin_data)

return bin_data

将字节文件转化为xml格式

def  convert_font_to_xml(bin_data):

# 由于TTFont接收一个文件类型

# BytesIO(bin_data) 把二进制数据当作文件来操作

font = TTFont(BytesIO(bin_data))

font.saveXML("text.xml")

bin_data = make_font_file(base64_str)

convert_font_to_xml(bin_data)

# 获取对应关系

font = TTFont(BytesIO(make_font_file(base64_str)))

uniList = font['cmap'].tables[0].ttFont.getGlyphOrder()

c = font['cmap'].tables[0].ttFont.tables['cmap'].tables[0].cmap

# c = font.getBestCmap()

print('cmap is:::::', c)

打印出来是这样子:cmap is::::: {38006: 'glyph00007', 38287: 'glyph00009', 39228: 'glyph00004', 39499: 'glyph00005', 40506: 'glyph00008', 40611: 'glyph00006', 40804: 'glyph00010', 40850: 'glyph00001', 40868: 'glyph00003', 40869: 'glyph00002'}

该字典的键就是网页上显示的乱码的unicode编码,值就是该乱码对应的真正数字。其中 glyph00007 是资源,每一个 glyph0000x 对应一个数字。

58的字体文件比较偷懒,根据其后缀就知道对应的数字是多少。

字体的xml文件中,下图部分开始可知(我没截取完),glyph00000没有意义,glyph00001对应0,glyph00001对应1以此类推。

那么,我们根据网页抓取的乱码的unicode编码,获取其对对应的字源,即可获取所对应的数字。

def   get_num(string):

ret_list = []

for char in string:

decode_num = ord(char)

num = c[decode_num]

num = int(num[-2:])-1

ret_list.append(num)

return  ret_list

如果通过浏览器看到的是类似   鸺齤齤   这样的乱码,使用爬虫获取的数据是类似   鸺龒龒   十六进制的数字,可直接截取后面四位转化为十进制数后在通过映射表查找。

使用   fontCreator   打开字体文件可以直观的看到每一个数字对应的编码。

至于还有其他类似的有字体加密的网站:起点中文网的书籍信息     https://book.qidian.com/info/1013302908

这里的字体文件在style标签内可以直接通过src获取

获取字体文件之后,操作步骤和58类似。

python 破解字体加密实战相关推荐

  1. python爬虫破解字体加密案例

    python爬虫破解字体加密案例 本次案例以爬取起小点小说为例 案例目的: 通过爬取起小点小说月票榜的名称和月票数,介绍如何破解字体加密的反爬,将加密的数据转化成明文数据. 程序功能: 输入要爬取的页 ...

  2. Python爬取58同城租房数据,破解字体加密

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于CSDN,作者:TRHX • 鲍勃 刚接触Python的新手.小白,可以复制下面的链 ...

  3. 最新版的破解字体加密方法!学会了就没有你不能爬的网站!

    前言 最近看到一些博主在讲解加密字体的破解方式,大体的解决方式是分析网页源代码,通过请求查看自定义字体,然后经过数据抓取完成需求. 这个方法确实很不错,但是对于我这种不太会爬虫的小白来说就与一些超纲了 ...

  4. python 破解字体反爬 (一)

    爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 这里我们以58同城为例: 点击 ...

  5. 破解字体加密解决思路

    之前做过爬取大众点评美团等电话号码遇到过字体反爬  ,故此处做个人记录 例如:58同城.起点中文网.大众点评等 加密思路 原理:关于字体加密,其实是将一种特定的字体库来代替浏览器本身的字体库显示的过程 ...

  6. 破解字体加密,以58同城网站为例。

    字体加密是爬取网页的过程中比较麻烦的问题. 字体加密一般是网页修改了默认的字符编码集,在网页上加载的他们自己定义的字体文件作为字体的样式,可以正确地显示数字,但是在源码上同样的二进制数由于未加载自定义 ...

  7. Python起点字体加密破解

    import requests import re from lxml import etree from fontTools.ttLib import TTFont from io import B ...

  8. 【excel】python破解excel加密视图

    破解流程 (关注"测试开发自动化" 弓中皓,查看历史文章,获取脚本源码) 前言 最近,我在写办公自动化脚本的时,我想要把excel(xls格式)中的内容复制到另一个excel中,从 ...

  9. python 破解字体反爬 (二)

    上一篇我介绍了破解58同城的字体反爬 https://blog.csdn.net/BigBoy_Coder/article/details/103239672 中间遗漏了几个细节,在这边文章我做一下补 ...

最新文章

  1. 通往安全自动驾驶汽车的艰难道路
  2. Docker学习(8)——构建镜像(Dockerfile、commit)
  3. 数据蒋堂 | BI系统中容易被忽视的数据源功能
  4. logback不同业务的日志打印到不同文件
  5. C#学习路线:C#入门经典 -> CLR VIA C# -> WINDOWS核心编程
  6. Python命令行解析:IDE内点击Run运行代码直接得出结果、基于TF flags(或argparse、sys.argv)在Dos内命令行(一条命令)调用代码文件得出结果
  7. ADO.NET数据库操作------SqlDataReader和SqlDataAdapter 区别
  8. AIX主机信任关系配置
  9. 笔记:Java虚拟机运行时数据区
  10. MySQL学习(3)单表查询
  11. 【题解】 P4127 [AHOI2009]同类分布
  12. 自考计算机系统结构知识点,2019自考计算机系统结构复习精讲资料一
  13. java 数字与金额_java 数字金额转换中文金额
  14. python 广告分析算法_[Python]研究广告渠道的特征数据与结果数据的相关性, 并对渠道作出评分模型...
  15. 因果推断综述及基础方法介绍(二)
  16. ACM金牌学长,算法竞赛经验分享
  17. android光标Cursor
  18. 2020 中国独立开发者生存现状调研报告
  19. Nginx 配置中nginx和alias的区别分析
  20. 每天记忆五个词根之四

热门文章

  1. 上云利器,K8S应用编排设计器之快到极致
  2. 老派程序员:徒手实现伟大成就
  3. 大O表示法初学者指南
  4. snprintf()函数探讨
  5. 开源小程序CMS网站,JeeWx-App-CMS 持续更新ing~
  6. Python 成为最受欢迎的语言靠实力吗?
  7. Linux命令卸载谷歌浏览器,linux系统安装和卸载google浏览器
  8. 安卓中的对称加密,非对称加密,MD5加密的算法
  9. Dcloud安卓离线打包
  10. android单元测试AndroidTestCase