写点什么

中文起,Python 字体反爬实战案例,再一点

作者:梦想橡皮擦
  • 2022 年 7 月 25 日
  • 本文字数:932 字

    阅读完需:约 3 分钟

📢📢📢📢📢📢💗 你正在阅读 【梦想橡皮擦】 的博客👍 阅读完毕,可以点点小手赞一下🌻 发现错误,直接评论区中指正吧📆 橡皮擦的第 <font color=red>665</font> 篇原创博客


⛳️ 起点 实战场景

本次采集的案例是点起文中,你可以随机打开一本目标 xiaoshuo,检查一下网络请求中是否存在字体文件响应数据。


Python脱敏处理.Python脱敏处理.Python脱敏处理/info/2952453/#Catalog
复制代码


字体加密位置呈现的效果如下图所示。



编写网页爬取代码,查看其字体位置使用的编码。


import requests
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36", "Origin": 'https://Python脱敏处理.com', "referer": "https://Python脱敏处理.com"}
response = requests.get(url='https://Python脱敏处理/info/2952453/',headers=headers)response.encoding = 'utf-8'
print(response.text[:20000])
复制代码


截取源码部分,查看编码内容。



同时下载本页面的字体文件,用工具打开之后,发现字体编码图形顺序没有什么变化,这对于后续我们解决反爬就变得非常简单了。



接下来读取和解构一下这个字体文件,在其中找到能用的数据。


from fontTools.ttLib import TTFont
import io
file_woff = './fonts/YOfzYtjr.woff'with open(file_woff, 'rb') as font_file: font = TTFont(io.BytesIO(font_file.read())) # 转换成字体对象#字体映射关系font_cmap = font['cmap'].getBestCmap()print(font_cmap)
复制代码


输出的信息为:


{100418: 'two', 100420: 'seven', 100421: 'five', 100422: 'nine', 100423: 'six', 100424: 'three', 100425: 'four', 100426: 'zero', 100427: 'one', 100428: 'period', 100429: 'eight'}
复制代码


接下来在回头去看一下刚才字体反爬位置的特殊字符与字体编码。网页特殊字符


&#100273;&#100271;&#100276;&#100274;&#100273;&#100269;
复制代码


字体编码


{100269: 'nine', 100271: 'five', 100272: 'three', 100273: 'six', 100274: 'period', 100275: 'one', 100276: 'eight', 100277: 'two', 100278: 'four', 100279: 'seven', 100280: 'zero'}
复制代码


得到最终的结果。


&#100273 -> 6


📣📣📣📣📣📣右下角有个大拇指,点赞的漂亮加倍


发布于: 18 小时前阅读数: 16
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
中文起,Python 字体反爬实战案例,再一点_Python_梦想橡皮擦_InfoQ写作社区