爬虫-------字体反爬

news/2024/11/6 12:30:59 标签: 爬虫

目录

一、了解什么是字体加密

二. 定位字体位置

三. python处理字体

1. 工具库

2. 字体读取

3. 处理字体

案例1:起点 

案例2:字符偏移:

5请求数据 - 发现偏移量

5.4 多套字体替换

套用模板

版本1

版本2

四.项目实战

1. 采集目标

2. 逆向结果

一、了解什么是字体加密

字体加密是页面和前端字体文件想配合完成的一个反爬策略。通过css对其中一些重要数据进行加密,使我们在代码获取的和在页面上看到的数据是不同的。

前端人员通过使用font-face来达到这个目的,font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中。而font-face的格式为:

@font-face {
	font-family: <FontName>;      # 定义字体的名称。             
	src: <source> [<format>][,<source> [<format>]]*;  # 定义该字体下载的网址,包括ttf,eof,woff格式等
}

二. 定位字体位置

  • 字体加密会有个映射的字体文件
  • 可以在元素面板搜索@font-face会通过这个标签指定字体文件,可以直接在页面上搜索,找到他字体的网址
  • 可以直接把字体文件下载下来, 文件可以一般需要自己修改后缀(网页的字体后缀一般选用woff)
    1. TTF:这是Windows操作系统使用的唯一字体标准,macintosh计算机也用truetype字体作为系统字体。
    2. OTF:这是一种开放的字体格式,支持Unicode字符集,可以在多种操作系统和设备上使用。
    3. FON:这是Windows 95及之前版本使用的字体格式。
    4. TTC:这是一种字体集合格式,包含多个字体文件,可以一次性安装多个字体。
    5. SHX:这是CAD系统自带的一种字体文件,符合了CAD的文字标准,但不支持中文等亚洲语言文字。
    6. EOT:这是早期网页浏览器使用的字体格式,但现在已经很少使用。
    7. WOFF:这是一种网页字体格式,可以在网页中使用,也可以转换为.TTF格式用于桌面应用。
  • 查看字体文件
    • 在线字体解析网站:在线字体编辑器-JSON在线编辑器
    • 可以直接把文件拖动到在线网址

我们抓包一个字体文件,在Font那一列,复制这个url到浏览器就可以下载下来

对应页面的数字。页面源码的字符前缀是&#x,woff文件的前缀是uni

三. python处理字体

1. 工具库
pip install fontTools  # 使用这个包处理字体文件
2. 字体读取
from fontTools.ttLib import TTFont
# 加载字体文件:
font = TTFont('file.woff')
# 转为xml文件:可以用来查看字体的字形轮廓、字符映射、元数据等字体相关的信息
font.saveXML('file.xml')

3. 字体读取

from fontTools.ttLib import TTFont
# 加载字体文件:
font = TTFont('file.woff')
kv = font.keys()
print(kv)

字体文件不仅包含字形数据和点信息,还包括字符到字形映射、字体标题、命名和水平指标等,这些信息存在对应的表中:

然后一些常见方法见 Python_FontTools使用-CSDN博客

3. 处理字体

如果想要把自定义的字体文字变化为系统能够识别的内容,就需要获取自定义字体与通用字体的映射规则,经过转化后就能得到正常文字信息。

字体解密的大致流程:

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

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

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

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

在 Python 代码中把找出的规律实现出来,让你的代码能够通过这个规律还原源代码与展示内容的映射

案例1:起点 

import re
import requests

url = 'https://www.qidian.com/rank/yuepiao/'
headers = {
    'Cookie': '_yep_uuid=16401b3f-da18-36f9-250b-44791c444165; e1=%7B%22l6%22%3A%22%22%2C%22pid%22%3A%22qd_P_rank_19%22%2C%22eid%22%3A%22%22%2C%22l1%22%3A5%7D; e2=%7B%22l6%22%3A%22%22%2C%22pid%22%3A%22qd_P_rank_19%22%2C%22eid%22%3A%22%22%2C%22l1%22%3A5%7D; newstatisticUUID=1689595424_1606659668; _csrfToken=6aCHItSuH6xVc1FVDCb7nGXnnDYFr6r6UdurzC7a; fu=801177549; traffic_utm_referer=; Hm_lvt_f00f67093ce2f38f215010b699629083=1689595425; Hm_lpvt_f00f67093ce2f38f215010b699629083=1689595425; _ga=GA1.2.225339841.1689595425; _gid=GA1.2.485020634.1689595425; _ga_FZMMH98S83=GS1.1.1689595425.1.1.1689595594.0.0.0; _ga_PFYW0QLV3P=GS1.1.1689595425.1.1.1689595594.0.0.0',
    'Host': 'www.qidian.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}

response = requests.get(url=url, headers=headers)
# print(response.text)

with open('乱码.html', mode='w', encoding='utf-8') as f:
    f.write(response.text)

"""下载字体文件"""
# format\('eot'\); src: url\('(.*?)'\) format\('woff'\), url\('
font_results = re.findall("format\('eot'\); src: url\('(.*?)'\) format\(

http://www.niftyadmin.cn/n/5740878.html

相关文章

[libos源码学习 1] Liboc协程生产者消费者举例

文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者&#xff0c; 为什么队列不需要上锁&#xff1f;5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…

更新!线下家政线上陪玩平台商业版2.0v源码搭建开启网络社交新时代

游戏开黑陪玩系统: 多客陪玩系统&#xff0c;游戏开黑陪玩&#xff0c;线下搭子&#xff0c;开黑陪玩系统 前端uniapp后端php&#xff0c;数据库MySQL 。陪玩系统的搭建和开发是一个涉及多个技术层面和步骤的复杂过程。以下是一个详细的概述&#xff0c;包括关键步骤和注意事项…

微服务设计模式 - 事件溯源模式(Event Sourcing Pattern)

微服务设计模式 - 事件溯源模式&#xff08;Event Sourcing Pattern&#xff09; 定义 事件溯源&#xff08;Event Sourcing&#xff09;是一种将所有状态更改保存为一系列事件的设计模式。每次系统状态发生变化时&#xff0c;都会生成一个事件&#xff0c;这些事件在事件存储…

Python详细实现龙格-库塔算法

目录 Python详细实现龙格-库塔算法引言一、龙格-库塔算法基本原理1.1 常微分方程初值问题1.2 龙格-库塔方法的基本思想1.3 龙格-库塔方法的具体形式 二、Python实现龙格-库塔算法2.1 基本实现代码解析&#xff1a; 2.2 高阶Runge-Kutta方法代码解析&#xff1a; 三、龙格-库塔算…

springboot约车APP-计算机设计毕业源码96773

基于Spring Boot的约车APP设计与实现 摘要 本文基于Spring Boot框架设计并实现了一款约车APP&#xff0c;旨在为用户提供便捷的出行服务。通过后端Spring Boot框架和前端交互界面的设计&#xff0c;实现了用户快速叫车、实时定位、路线规划等功能。系统结合了高效的后端处理和直…

Milvus - 混合搜索和重排策略详解

在AI驱动的搜索系统中&#xff0c;如何有效地结合多模态的向量数据是关键。Milvus 的 hybrid_search() API 提供了这种混合搜索的功能&#xff0c;支持通过多种重排策略来进一步优化搜索结果。这篇文章将详细介绍 Milvus 中重排的过程、其重要性以及如何实现不同的重排策略。 什…

大模型学习笔记------CLIP模型的再思考

大模型学习笔记------CLIP模型的再思考 1、CLIP模型与Prompt(提示)的思考2、CLIP模型与ResNet等分类模型的根本区别3、结束语 上文已经讲 CLIP&#xff08;Contrastive Language-Image Pretraining&#xff09;这个模型&#xff0c;也讲了我的一些思考。但是&#xff0c;随着深…

【手撕排序1】希尔排序(直接插入排序)

&#x1f343; 如果觉得本系列文章内容还不错&#xff0c;欢迎订阅&#x1f6a9; &#x1f38a;个人主页:小编的个人主页 &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ✌️ &#x1f91e; &#x1f91f; &#x1f918; &#x1f919; &#x1f448; &…