其实字体加密不难,我刚开始接触字体加密的时候应该和大部分人一样感到脑壳疼,这无聊的开发,为啥要写这么难,在我写过几个网站的字体反爬后就感觉并没有那么难 ,感觉字体反爬都是一个套路,我们以58同城二手车来介绍,(还有汽车之家的论坛,起点中文网(比较简单),大众点评,自如)
1, 首先我们看他源码

汽车的价格被加密了,我们首先想的就是字体加密,
2.查找加密文件

可以看到字体文件被base64加密成一长串字符串了,我们用正则吧字符串取下来 用base64解码成woff文件,然后再转化为xml文件供我们观察

3.通过xml文件,我们可以看到字体都是坐标,都是画出来的,我们放到专门的软件吧文件画出来


可以看到就是0-9的数字,多请求几次进行对比,我们发现他有相同的 也有不同点
相同:都是0-9,同一个数字的自型是一样的,也就是坐标
不同:同一个数字代表他的name不同
4 破解
我们通过一个字体文件 得出映射关系 这个关系是 ,数字和字形的关系
然后每次请求获取的字体文件 解析出 name属性,和字形 通过字形和你设定好的关系进行对比 找到数字
再通过name 在源网页中进行替换

这是我根据一个字体文件得到的,hex是字形的md5加密后的值

到这差不多就结束了 ,其实大部分都是这种的 简单的咱就不说了,还有那种没有任何规律的就直接用ocr识别吧 (我发布的文章里面也有,如果有好办法要教教我哦)
全部代码如下(代码很丑,没整理,凑活吧)

import requests
import base64
import re
from fontTools.ttLib import TTFont
from lxml import etree
from hashlib import md5
url = 'https://bj.58.com/baoma/?listfrom=dspadvert&PGTID=0d3036e0-0000-1e16-19b4-92f3e56b847f&ClickID=100#mainCon'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'
}
ret = requests.get(url=url,headers=headers)
ret.encoding='utf8'with open('58.html','w',encoding='utf8') as f:f.write(ret.text)with open('58.html','r',encoding='utf8') as f:ret = f.read()
ba64 = re.findall('base64,(.*?)\'\) forma',ret)[0]
b= base64.b64decode(ba64)
with open('1.woff','wb') as f:f.write(b)#
# font_dict = {#
#     '-': 0,
#     '时': 1,
#     '%': 2,
#     '/': 3,
#     '万':4,
#     '+':5,
#     '¥':6,
#     '元':7,
#     '起':8,
#     '折':9
# }
base_font={'font':[{'name':'-','value':'3','hex':'f9d6f8bfb0257137ad304bcae1009022'},{'name':'时','value':'0','hex':'79a6e23d10c68d14e4ec507e6b02bbf2'},{'name':'%','value':'5','hex':'7125656f5dd35120031671deec325dbe'},{'name':'/','value':'7','hex':'927faa2e53d85d841839ec58daddb138'},{'name':'万','value':'8','hex':'73b0b18ef35ebe5df363bccf4ea5e356'},{'name':'+','value':'2','hex':'6d6f25ae791948b9b1b6538c4fd5a09b'},{'name':'¥','value':'1','hex':'f3980be01c0bf2e821672497b680f59d'},{'name':'元','value':'6','hex':'7c26f89c45f85da47fdb94e6edec97b7'},{'name':'起','value':'4','hex':'e32ccaa22e9bfc82e927c8c4c5c7487e'},{'name':'折','value':'9','hex':'415e4dc11caaf995d552a41238fed31d'},
]}
# font = TTFont('1.woff')
# # font.saveXML('1.xml')
# for i in font_dict:
#     print('uni'+i[3:-1].zfill(4).upper())
#     font_cmap = font['glyf'].glyphs.get('uni'+i[3:-1].zfill(4).upper()).data
#     glpyh = md5(font_cmap).hexdigest()
#     print(i,glpyh)
#.getBestCmap()fot = {'uni002D':'-','uni65F6':'时','uni0025':'%','uni002F':'/','uni4E07':'万','uni002B':'+','uni00A5':'¥','uni5143':'元','uni8D77':'起','uni6298':'折',
}
dic = {}
font = TTFont('1.woff')
font.saveXML('1.xml')
font_cmap = font['cmap'].getBestCmap()
uni_list = font_cmap.values()
print(uni_list)
font_n = TTFont('1.woff')
for i in uni_list:f = font_n['glyf'].glyphs.get(i).dataglpyh = md5(f).hexdigest()for j in base_font.get('font'):if j.get('hex')==glpyh:dic[fot[i]]=j['value']
print(dic)with open('58.html','r',encoding='utf8') as f:ret = f.read()
for i in dic:ret = ret.replace(i,dic[i])
page_html = etree.HTML(ret)
lis = page_html.xpath('//*[@id="list"]/ul/li/div')for li in lis:name = ('-').join(li.xpath('../div[1]/a//text()')).replace('\n','').replace('\t','').replace(' ','')# money = li.xpath('../div[2]//text()')print(name)

58同城字体加密-多套字体文件相关推荐

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

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

  2. 爬取58同城,解决反爬字体加密解析问题

    [导语]我们在爬取数据中,会遇到字体乱码的下,其实是字体加密,本篇文章主要解决字体解密这种反爬方式. 1.在浏览器打开58同城网址进入北京租房 2.点击检查,找到房租价格对应位置,发现源码中价格部分是 ...

  3. (HttpClient技术)(58同城系列)58同城登录加密的js

    关于登录部分的代码太长了,所以决定 把js部分分离开来,本来想把加密的js,上传到下载的,不过想想,这样太坑爹了了,本来就一个简单的js,还去片积分,太不像话了,下面就具体来讲讲58同城登录部分的加密 ...

  4. readfile读取串口数据_谈一谈使用字体库加密数据仿58同城

    本文转载于 SegmentFault 社区 作者:Aaron 对于前端同学来说其实做的更多的事情就是把数据整合好,按照UI同学的设计通过后端同学给的数据展示在网页中,这也就导致了很多人认为前端很简单, ...

  5. python 破解字体加密实战

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

  6. Python3 爬虫实战 — 58同城武汉出租房【加密字体对抗】

    爬取时间:2019-10-21 爬取难度:★★★☆☆☆ 请求链接:https://wh.58.com/chuzu/ 爬取目标:58同城武汉出租房的所有信息 涉及知识:网站加密字体的攻克.请求库 req ...

  7. 字体加密-58同城简历信息爬取

    加密文件通过base64加密,先拿到加密字符串,通过base64解密,保存成woff文件 利用fonttool把woff文件保存成xml文件,再开始分析真实数据与加密数据的动态映射关系 映射关系如下: ...

  8. Python复健练习:爬取58同城房产月租及户型加密字体

    Request URL: https://maoyan.com/ 任务:获取正确的信息 [考虑网页渲染性能,通常网页开发者会把自定义的文体编码成base64的方式] 考虑网页渲染性能,通常网页开发者会 ...

  9. Python爬取58同城租房数据,完美解决字体加密

    前言 在这里我就不再一一介绍每个步骤的具体操作了,因为在爬取老版今日头条数据的时候都已经讲的非常清楚了,所以在这里我只会在重点上讲述这个是这么实现的,如果想要看具体步骤请先去看我今日头条的文章内容,里 ...

最新文章

  1. 可以接受失败,但不选择放弃
  2. 并发Bug之源有三,请睁大眼睛看清它们
  3. 团队项目-个人博客-4.20
  4. 树莓派3 有线静态路由设置_clash在树莓派
  5. Android学习笔记(三):android画图之paint
  6. 树的存储结构以及实现代码
  7. [机器学习] Boosting算法2 --- GBDT
  8. day02(下)_运算符
  9. 在用户态下使用uint64_t
  10. 【训练过程】1) Create Training File(创建训练文件)
  11. 阿里达摩院发布2019十大科技趋势!AI专用芯片将挑战GPU的绝对统治地位
  12. Kinaba及X-Pack插件安装
  13. [渝粤教育] 西南科技大学 企业生产运作管理 在线考试复习资料2021版
  14. Camtasia 2021mac版
  15. 腾讯教育 App Flutter 跨端点播组件实践
  16. linux dm9000网卡 原理图怎么看,LINUX移植——DM9000网卡移植
  17. 仿百度文库,office转pdf核心转换功能
  18. 软件测试-面试题(基础+性能)
  19. Python中sorted()排序与字母大小写的问题
  20. java hypot_Java StrictMath hypot()方法与示例

热门文章

  1. 魅族手机便签的备忘录内容误删了怎么办?
  2. RunTime: 块内存复制
  3. Linux下内存检测工具:asan
  4. 互联网项目开发流程大全
  5. NetXpert XG解决方案迎接新挑战!
  6. JavaScript像素鸟案例
  7. 云部署vs本地部署_对于云部署,“有效”还不够好
  8. sol文件解析AS2.0——小游戏上古神器2存档通过Python解析
  9. 案例:京东登录页面css创建
  10. 大学的计算机证书,大学必拿的几个证书是什么?