首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 7.8 字体反爬案例分析与爬取实战 在Web爬虫领域,网站为了保护数据不被轻易抓取,会采用各种反爬虫技术。其中,字体反爬(也称为字体加密或CSS字体混淆)是一种较为新颖且有效的防御手段。它通过将网页中的关键信息(如数字、价格、用户名等)通过自定义字体进行显示,而这些字体文件(如`.woff`、`.woff2`等)中实际存储的是加密后的字符形状,而非标准的字符编码。这样,即使爬虫能够获取到HTML源代码,也无法直接解析出这些关键信息的真实内容。本章将深入分析字体反爬的原理,并通过实战案例展示如何破解并爬取这类数据。 #### 7.8.1 字体反爬原理概述 字体反爬的核心在于利用Web字体技术(Web Fonts)将敏感信息以非标准字符集的形式展示。当浏览器加载网页时,会同时下载并渲染这些自定义字体文件。浏览器根据CSS样式规则,将特定文本以这些字体显示,而爬虫则无法直接识别这些被“美化”后的字符所代表的实际意义。 字体文件(如`.woff`)内部存储的是字体的字形描述,而非字符的ASCII码或Unicode码。因此,即使爬虫能够下载字体文件,也需要额外的步骤来解析这些字形与原始字符之间的映射关系。 #### 7.8.2 字体反爬案例分析 **案例背景**:假设我们需要爬取一个电商网站上的商品价格,但该网站采用了字体反爬技术,将价格数字以自定义字体显示。 **步骤一:识别字体反爬** 首先,通过浏览器开发者工具(如Chrome的DevTools)检查目标元素的CSS样式。如果发现`font-family`属性指向了一个非标准字体(如`MyCustomFont`),且该字体通过`@font-face`规则在CSS中定义,并链接到了一个外部字体文件(如`mycustomfont.woff`),则可以初步判断该网站使用了字体反爬技术。 **步骤二:下载字体文件** 在浏览器开发者工具的网络请求(Network)标签页中,找到并下载该字体文件。通常,字体文件会在页面加载时作为资源被请求。 **步骤三:分析字体文件** 字体文件的分析需要借助专门的工具,如FontForge、FontEditor等。这些工具可以打开`.woff`、`.woff2`等格式的字体文件,并允许用户查看和编辑字体中的字形。 1. **打开字体文件**:使用FontForge等工具打开下载的字体文件。 2. **查看字形映射**:在工具中查看每个字符对应的字形,并尝试识别这些字形所代表的实际字符。这通常是一个手动过程,需要对比多个字符来建立映射关系。 3. **编写解析脚本**:根据字形与字符的映射关系,编写Python脚本(或利用现有库)来自动化解析过程。 **步骤四:编写爬虫** 在掌握了字体文件中字符的映射关系后,可以编写爬虫来抓取网页内容,并使用解析脚本将加密的字符转换为真实的数据。 ```python # 假设已经有一个函数font_decode,它接受加密字符和字体映射表,返回解码后的字符 def fetch_and_decode_price(url, font_mapping): # 使用requests或selenium等库获取网页内容 response = requests.get(url) html = response.text # 假设通过某种方式(如正则表达式)提取出加密的价格字符串 encrypted_price = extract_price_from_html(html) # 解码价格 decoded_price = font_decode(encrypted_price, font_mapping) return decoded_price # 调用函数 decoded_price = fetch_and_decode_price('http://example.com/product', font_mapping) print(decoded_price) ``` #### 7.8.3 实战技巧与注意事项 **技巧一:自动化字体文件解析** 对于大型项目或需要频繁爬取数据的场景,手动建立字形映射关系显然是不现实的。可以考虑使用机器学习或图像处理技术来自动化这一过程。例如,训练一个模型来识别字体文件中的字符形状,并预测其对应的标准字符。 **技巧二:动态加载与JavaScript渲染** 有些网站会通过JavaScript动态加载字体文件或渲染页面内容。在这种情况下,单纯使用requests等HTTP库可能无法获取到完整的数据。此时,可以考虑使用Selenium等能够模拟浏览器行为的工具来抓取数据。 **注意事项一:遵守法律法规与网站政策** 在进行网络爬虫开发时,务必遵守相关法律法规和网站的使用政策。未经允许擅自爬取网站数据可能构成违法行为。 **注意事项二:尊重网站资源** 合理设置爬虫的访问频率和并发数,避免对网站服务器造成过大压力。同时,对于通过API提供的数据,应优先考虑使用官方API进行访问。 **注意事项三:应对反爬虫策略升级** 随着反爬虫技术的不断发展,网站可能会升级其反爬虫策略。因此,爬虫开发者需要持续关注目标网站的变化,并及时调整爬虫策略以应对新的挑战。 #### 结语 字体反爬作为一种新兴的反爬虫技术,给网络爬虫开发带来了一定的挑战。然而,通过深入分析其原理并结合适当的工具和技术手段,我们仍然可以有效地破解并爬取这类数据。在实战过程中,我们需要注意遵守法律法规和网站政策,尊重网站资源,并灵活应对反爬虫策略的升级。
上一篇:
7.7 CSS 位置偏移反爬案例分析与爬取实战
下一篇:
8.1 使用 OCR 技术识别图形验证码
该分类下的相关小册推荐:
Python合辑7-集合、列表与元组
Python爬虫入门与实战开发(上)
剑指Python(磨刀不误砍柴工)
Python编程轻松进阶(二)
Python机器学习实战
Python与办公-玩转Excel
Python合辑10-函数
Python合辑9-判断和循环
Python数据分析与挖掘实战(上)
Python合辑12-面向对象
Python编程轻松进阶(四)
Python编程轻松进阶(五)