中文起点,Python 字体反爬实战案例,再一篇~
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 665 篇原创博客
畅销专栏,打折促销中~
⭐️ 《Python 爬虫 120》⭐️
⛳️ 起点 实战场景
本次采集的案例是点起中文,你可以随机打开一本目标书籍,检查一下网络请求中是否存在字体文件响应数据。
https://book.qidian.com/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://book.qidian.com',
"referer": "https://book.qidian.com"
}
response = requests.get(url='https://book.qidian.com/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'}
接下来在回头去看一下刚才字体反爬位置的特殊字符与字体编码。
网页特殊字符
𘞱𘞯𘞴𘞲𘞱𘞭
字体编码
{100269: 'nine', 100271: 'five', 100272: 'three', 100273: 'six', 100274: 'period', 100275: 'one', 100276: 'eight', 100277: 'two', 100278: 'four', 100279: 'seven', 100280: 'zero'}
得到最终的结果。
𘞱
-> 6
📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍
欢迎大家订阅专栏:
⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️
分类:
python爬虫100例教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2019-05-20 五一4天就背这些Python面试题了,Python面试题No12