爬虫进阶-反爬破解7(逆向破解被加密数据:全方位了解字体渲染的全过程+字体文件的检查和数据查看+字体文件转换并实现网页内容还原+完美还原上百页的数据内容)
目录
一、全方位了解字体渲染的全过程
1.加载顺序
2.实践操作:浏览器中调试字体渲染
3.总结:
二、字体文件的检查和数据查看
1.字体文件的操作软件
2.映射关系的建立
3.实践操作:翻找样式和真实内容
4.总结:
三、字体文件转换并实现网页内容还原
1.字体文件的转换
2.替换网页内容
3.实践操作:字体映射的解密和爬取
四、完美还原上百页的数据内容
1.字体文件的转换
2.替换网页内容
3.实践操作:爬虫实战,还原数据内容
4.总结:
一、全方位了解字体渲染的全过程
1.加载顺序
(1)载入字体内容或文件
(2)@font-face定义
(3)css中进行字体引用
2.实践操作:浏览器中调试字体渲染

3.总结:
(1)字体渲染:网页看到的数据和调试工具中的数据不一致。
(2)字体内容可以是文件形式,或者是base64内容格式。
(3)将加密内容进行手动替换操作。
二、字体文件的检查和数据查看
1.字体文件的操作软件
windows平台:FontCreator
macOS平台:IconFronPreview
Linux平台:FontForge
2.映射关系的建立
查看字体文件的内容,找出数字样式和真实内容
查看网页内容,找出网页的数字样式和真实内容
3.实践操作:翻找样式和真实内容
4.总结:
(1)一定要找出真实内容和数字样式的对应关系,非必需百分百找出
(2)浏览器调试工具看到的不一定是对的,可能是默认字体渲染
三、字体文件转换并实现网页内容还原
1.字体文件的转换
(1)python安装fontTools库
(2)使用fontTools读取TTF格式字体文件
(3)将内容保存成xml格式
(4)从xml格式中读取映射关系
2.替换网页内容
(1)请求网页内容
(2)循环映射关系,批量替换掉网页内容中的加密字体
(3)解析替换数据后的网页数据内容
(4)请求并分析接口数据的内容
(5)将日志保存到文件
3.实践操作:字体映射的解密和爬取
# 麣龒龤龒龒
# 10400import requests
from fontTools.ttLib import TTFont # pip install fontTools
from lxml import etreefonturl = 'http://shanzhi.spbeen.com/static/fonts/szec.ttf'
fontresponse = requests.get(fonturl)
print(fontresponse)
with open('font.ttf','wb') as file:file.write(fontresponse.content)font = TTFont("font.ttf")
# font.saveXML("font.xml")
result_dict = {}
for k,v in font['cmap'].getBestCmap().items():# hex()函数是将十进制转成16进制k = hex(k).replace('0x','&#x')+';'v = int(v[8:10])-1result_dict[k]=str(v)
print(result_dict)url = 'http://shanzhi.spbeen.com/search/?word='
response = requests.get(url)
html = response.text
for k,v in result_dict.items():html = html.replace(k,v)
# print(html)htmlobj = etree.HTML(html)
divcard = htmlobj.xpath('.//div[@class="content"]/div')
for dc in divcard:td = {}td['标题'] = dc.xpath('./div/h5/a/text()')td['薪资'] = dc.xpath('./div/h5/small/text()')print(td)
四、完美还原上百页的数据内容
1.字体文件的转换
2.替换网页内容
3.实践操作:爬虫实战,还原数据内容
import requests
from fontTools.ttLib import TTFont
from lxml import etree
from time import sleepimport logginglogging.basicConfig(level=logging.DEBUG,filename='debug.log',filename='a',format='%(asctime)s-%(levelname)s-[%(filename)s:%(lineno)d]-%(message)s')font = TTFont("font.ttf")
result_dict = {}
for k,v in font['cmap'].getBestCmap().items():# hex()函数是将十进制转成16进制k = hex(k).replace('0x','&#x')+';'v = int(v[8:10])-1result_dict[k]=str(v)def replace_html(html:str):for k,v in result_dict.items():html = html.replace(k,v)return htmlurl = 'http://shanzhi.spbeen.com/search/?word=%E5%B5%8C%E5%85%A5%E5%BC%8F&page={}&_=1631261605624'for i in range(1,10000):turl = url.format(i)response = requests.get(turl)html = replace_html(reponse.text)htmlobj = etree.HTML(html)divcard = htmlobj.xpath('.//div[contains(@class, "animate__animated")]')total_num += len(divcard)print("当前页面是第{}页,总计有{}条数据,当前页数据如下:".format(i,len(divcard),total_num))for dc in divcard:td = {}td['标题'] = dc.xpath('./div/h5/a/text()')td['薪资'] = dc.xpath('./div/h5/small/text()')print(' ',td)if len(divcard) < 10:breakelse:passsleep(0.1)
4.总结:
(1)提取出具体的原数据和对应数字,进行网页内容的替换
(2)注意原数据的完整格式,确保替换后的数据没有多余符号
(3)找数据接口和具体参数,循环请求接口拿数据
相关文章:
爬虫进阶-反爬破解7(逆向破解被加密数据:全方位了解字体渲染的全过程+字体文件的检查和数据查看+字体文件转换并实现网页内容还原+完美还原上百页的数据内容)
目录 一、全方位了解字体渲染的全过程 1.加载顺序 2.实践操作:浏览器中调试字体渲染 3.总结: 二、字体文件的检查和数据查看 1.字体文件的操作软件 2.映射关系的建立 3.实践操作:翻找样式和真实内容 4.总结: 三、字体文…...
系统架构设计师之RUP软件开发生命周期
系统架构设计师之RUP软件开发生命周期...
VM虚拟机 13.5 for Mac
VMware Fusion Pro for Mac是一款强大的虚拟机软件,可以在Mac操作系统中创建、运行和管理多个虚拟机,使用户可以在一台Mac电脑上同时运行多个操作系统和应用程序。 以下是VMware Fusion Pro for Mac的主要特点: 1. 支持多种操作系统ÿ…...
一篇教你学会Ansible
前言 Ansible首次发布于2012年,是一款基于Python开发的自动化运维工具,核心是通过ssh将命令发送执行,它可以帮助管理员在多服务器上进行配置管理和部署。它的工作形式依托模块实现,自己没有批量部署的能力。真正具备批量部署的是…...
Mysql第四篇---数据库索引优化与查询优化
文章目录 数据库索引优化与查询优化索引失效案例数据准备1. 全值匹配2 最佳左前缀法则(联合索引)主键插入顺序4 计算、函数导致索引失效5 类型转换(自动或手动)导致索引失效6 范围条件右边的列索引失效7 不等于(!或者<>)索引失效8 is null可以使用索引, is not null无法使…...
SpringBoot手动获取实例
1.首先创建一个接口里面是关于建库建表的方法 public interface MetaMapper {//三个核心建表方法void createExchangeTable();void createQueueTable();void createBingdingTable(); } 2.启动类中定义一个ConfigurableApplicationContext 类型的变量context接收SpringApplica…...
栈(Stack)的概念+MyStack的实现+栈的应用
文章目录 栈(Stack)一、 栈的概念1.栈的方法2.源码分析 二、MyStack的实现1.MyStack的成员变量2.push方法3.isEmpty方法和pop方法4.peek方法 三、栈的应用1.将递归转化为循环1.调用递归打印2.通过栈逆序打印链表 栈(Stack) 一、 栈…...
C语言进阶第九课 --------动态内存管理
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
嵌入式 Tomcat 调校
SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。 调用嵌入式 Tomcat,如果按照默认去启动,一个 main 函数就可以了。 简单的例子 下面是启动…...
初始化固定长度的数组
完全解析Array.apply(null,「length: 1000」) 创建固定长度数组,并且初始化值。直接可以使用map、forEach、reduce等有遍历性质的方法。 如果直接使用Array(81),map里面的循环不会执行。 //方法一 Array.apply(null, { length: 20 })//方法二 Array(81)…...
实现基于 Jenkins 的多服务器打包方案
实现基于 Jenkins 的多服务器打包方案 在实际项目中,我们经常会遇到需要将一个应用程序或服务部署到不同的服务器上的需求。而使用 Jenkins 可以很方便地自动化这个过程。 设置参数 首先,我们需要设置一些参数,以便在构建过程中指定要部署…...
探索现代IT岗位:职业机遇的海洋
目录 1 引言2 传统软件开发3 数据分析与人工智能4 网络与系统管理5 信息安全6 新兴技术领域 1 引言 随着现代科技的迅猛发展,信息技术(IT)行业已经成为了全球经济的关键引擎,改变了我们的生活方式、商业模式和社会互动方式。IT行…...
np.linspace精确度
前言 今天发现一个大坑,如果是序列是小数的话,不要用np.linspace,而要用np.arrange指定等差序列。比如入下图中a和b是一样的意思,但是b是有较大误差的。 anp.arange(0,4,0.4) bnp.linspace(0,4,10) print("a",a) prin…...
GD32_定时器输入捕获波形频率
GD32_定时器输入捕获波形频率(多通道轮询) 之前项目上用到一个使用定时器捕获输入采集风扇波形频率得到风扇转速的模块,作为笔记简单记录以下当时的逻辑结构和遇到的问题,有需要参考源码、有疑问或需要提供帮助的可以留言告知 。…...
单窗口单IP适合炉石传说游戏么?
游戏道具制作在炉石传说中是一个很有挑战的任务,但与此同时,它也是一个充满机遇的领域。在这篇文章中,我们将向您展示如何在炉石传说游戏中使用动态包机、多窗口IP工具和动态IP进行游戏道具制作。 作者与主题的关系:作为一名热爱炉…...
win11安装docekr、docker-compose
1.docker安装 下载地址:Install Docker Desktop on Windows | Docker Docs 出问题别慌,看清楚提示信息,cmd更新wsl,什么是wsl,百度好好理解一下哦 2.docker-compose安装 还是去官方看看怎么说的,然后跟着处…...
Postman的简单使用
Postman简介 官网 Postman是Google公司开发的一款功能强大的网页调试与发送HTTP请求,并能运行测试用例的Chrome插件 使用Postman进行简单接口测试 新建测试 → 选择请求方式 → 请求URL,下面用百度作为例子: 参考文档 [1] Postman使用教程…...
信号继电器驱动芯片(led驱动芯片)
驱动继电器需要配合BAV99(防止反向脉冲)使用 具体应用参考开源项目 电阻箱 sbstnh/programmable_precision_resistor: A SCPI programmable precision resistor (github.com) 这个是芯片的输出电流设置 对应到上面的实际开源项目其设置电阻为1.5K&…...
IDEA配置HTML和Thymeleaf热部署开发
IDEA配置HTML和Thymeleaf热部署开发 1.项目配置2. IDEA配置3. 使用 需求:现在我们在开发不分离项目的时候(SpringBootThmeleaf)经常会改动了类或者静态html文件就需要重启一下服务器, 这样不仅时间开销很大,而且经常重…...
Nginx动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
