资讯动态

大众点评爬虫破解字体加密的完整指南:从网页乱码到结构化数据

发布时间:2026/8/20 17:46:28 来源:尧图企业网站定制
大众点评爬虫破解字体加密的完整指南从网页乱码到结构化数据【免费下载链接】dianping_spider大众点评爬虫全站可爬解决动态字体加密非OCR。持续更新项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider如果你曾在浏览器里复制大众点评上的评分数字粘贴出来却是一串方框乱码那么你已经撞上了这家平台最著名的反爬机制——动态字体加密。而dianping_spider这个开源的大众点评爬虫项目正是冲着这条坎来的并且它给出的解法不是笨重的 OCR 截图识别而是直接逆向字体文件本身。这篇文章会像拆玩具一样把这个大众点评爬虫的破解思路、防封策略和上手路径一层层剥开。你不一定需要懂字体技术但读完后会明白那些看似加密的页面数据到底是怎么变成干干净净的表格的。先看一个每天都在发生的尴尬场景假设你要调研某商圈的自助餐市场。你在大众点评搜索页翻到一家店评分 4.8人均 198 元评论 2300 条——一切都很完美直到你想把数据整理进表格。用鼠标选中评分复制粘贴亂碼想抓取页面源码里面是#xec5f;这种十六进制实体想用现成爬虫框架拿到手全是问号这不是你的操作有问题而是页面上所有关键数字和文字都被替换成了一套加密字体。浏览器渲染时显示正常但源码里全是暗号。传统的应对方式是截图后 OCR速度慢、准确率看运气。这个项目则走了另一条路直接分析字体文件本身把暗号翻译回明文。字体加密反爬界的障眼法是怎么运作的要理解这个项目的破解逻辑先得知道对面使了什么招。大众点评的字体反爬可以拆成两部分第一部分是 woff 字体文件。页面里有一段自定义字体数字 0-9 和常用汉字都被画进了这个字体文件里但每个字符的 unicode 编码被随机打乱。浏览器靠这个字体正常渲染而你复制出来的字符编码对应的是乱序后的假字形。第二部分是坐标定位。评论页更狡猾一些不直接给你字体而是把文字画进一张 SVG 雪碧图里再用 CSS 的背景定位把对应字形切出来。浏览器看得到爬虫拿不到。两套机制一套管数字一套管文字互相配合。这也就是为什么替换字符这种朴素方案总是失效——因为映射关系每次都可能变。拆开 dianping_spider 的破解工具箱项目把整个反制过程封装在了utils/get_font_map.py里逻辑清晰得像一份解题步骤。我们按它实际执行的顺序来看。第一件工具字体文件解析器woff → 可读文字搜索页的 HTML 源码里藏着一个字体 CSS 的链接项目用正则把它抠出来然后顺着 CSS 找到 woff 字体文件的地址下载到本地临时目录。接下来是核心操作用fontTools库把 woff 文件转换成 XML读取里面的字形顺序GlyphOrder再和项目自带的files/template_map.json模板映射做匹配。模板里存着glyph 编号 → 真实字符的对应关系两者一比对一份完整的暗号 → 明文字典就生成了以 JSON 形式缓存到tmp目录——下次遇到同一套字体直接复用不用重复解析。第二件工具坐标定位器SVG 雪碧图评论页走的是另一条路。项目先下载 CSS用正则解析出每个 CSS 类的背景坐标横轴、纵轴的像素偏移再下载 SVG 雪碧图找出每个文字在图片里的行位置。关键细节在这项目会根据字体颜色#333或#666判断字体的高度和宽度偏移量因为不同字体在雪碧图里的排版参数不一样。算出坐标后从雪碧图的字符序列里把对应位置的字取出来同样生成一份映射 JSON。第三件工具HTML 替换引擎字典有了最后一步是把它用起来。utils/requests_utils.py里的替换函数遍历映射把页面源码里所有#xXXXX;形式的加密实体替换成明文。这一步做完HTML 就变成了正常的文本交给 BeautifulSoup 解析字段想怎么提取就怎么提取。所以整个破解链路是抠 CSS → 下载字体/雪碧图 → 解析映射 → 替换 HTML → 常规解析。每一环都有明确的代码落点不存在魔法也没有 OCR。破解只是入场券防封才是长期饭票能解密只是第一步。大众点评的反爬不只是字体这一道请求频率、IP 维度、登录态维度全都盯得很紧。这个项目在防封上也下了不少功夫而且大部分策略是可以自己调节的。请求节奏自己定不用背参数config.ini里的requests_times控制全局请求节奏格式是累计请求次数,休息秒数用分号分隔多个档位requests_times 1,2;3,5;10,50含义很直白每请求 1 次休息 2 秒累计到 3 次休息 5 秒累计到 10 次休息 50 秒。档位从小到大排列程序会自动匹配。想激进一点就调小想稳一点就调大完全看你的场景和对风险的接受度。cookie 池与代理轮换双保险cookie 池把多个账号的 cookie 逐行写进cookies.txt开启use_cookie_pool True后程序会自动轮换使用。更贴心的是搜索、详情、评论三类页面的 cookie 是分开维护的——某页面的 cookie 被封了不会连累其他页面。代理轮换支持两种接入方式。http_extract模式从代理服务商的提取接口批量拉取 IP还能设置repeat_nub让每个 IP 重复利用一个 IP 通常有约 1 分钟有效期key_extract模式则用账号密码形式的代理隧道更隐蔽。一个容易被忽略的小细节请求工具里有个全局等待机制每次请求前先记账一旦累计次数命中档位就用 tqdm 进度条显示等待倒计时中间还插入了随机睡眠时间。它让请求节奏看起来更像人类操作而不是精确到毫秒的机器行为。另外评论页的第一页访问p1会触发验证码所以程序对第一页单独处理直接访问不带页码的 URL——这种细节如果不是真踩过坑是写不出来的。半小时内跑通第一次采集上手成本没有想象中高虽然配置文件里有三十多个参数但大部分都有默认值真正要动的手指头数得过来。第一步环境与依赖建议 Python 3.7 以上然后安装依赖git clone https://gitcode.com/gh_mirrors/di/dianping_spider cd dianping_spider pip install -r requirements.txt如果下载慢可以加清华镜像源参数。依赖主要是 lxml、requests、faker、beautifulsoup4、fontTools、pymongo 这几个。第二步改两个配置文件config.ini是主配置最值得关注的几项[config] save_mode mongo # 保存方式目前支持 MongoDB requests_times 1,2;3,5;10,50 [detail] keyword 自助餐 # 搜索关键词 location_id 8 # 城市代号如上海为 1北京为 2 need_pages 1 # 搜索几页建议第一次只跑 1 页require.ini决定要哪些数据像点菜单一样勾选[shop_phone] # 店铺电话 need True need_detail False # False 时电话显示为 12345678**True 为完整号码 [shop_review] # 店铺评论 need True more_detail False # False 只拿 10 条精选评论 need_pages 3 # 开启 more_detail 后评论每页 30 条这里有个务实的建议need_detail和more_detail都标着谨慎选择因为要拿完整电话和全量评论必须带登录态请求频繁操作会触发封号一般是临时封过段时间自动解开。第三步运行python main.py默认走搜索 → 详情 → 评论的完整流程控制台会显示每一页的搜索进度和每家店的爬取进度。数据直接落进 MongoDBmongo_path留空表示连接本地默认 27017 端口。如果不想从搜索开始比如手里已经有一个shop_id只想单独补详情或评论可以这样python main.py --normal 0 --detail 1 --review 0 --shop_id k30YbaScPKFS0hfP --need_more False只爬评论就把--detail 0 --review 1。这种定制模式在做增量更新时很实用。跑完一次你能拿到什么以自助餐为关键词跑完搜索你会得到每个店铺的 ID、名称、评论总数、人均价格、标签、地址、推荐菜和评分这是最基础的搜索结果层进入详情页后数据维度进一步丰富地址、电话、营业时间等硬信息补齐评分维度也更细如果你开启了评论采集收获会更可观用户打分、评论内容、点赞数、商家回复、人均价格、发布时间全都有连用户喜欢的菜都能提取出来再往下走评论摘要层还给出了好评、中评、差评的个数分布以及带图评论数量。这些字段对于做情感分析、竞品对比、商圈热度评估来说都是现成的原料值得一提的是项目作者刻意保留了大部分原始字段不做清洗——因为大众点评不同频道的字段格式差异很大统一处理反而容易丢数据。所以原样保存、后续自己清洗是这个项目默认的哲学这也意味着拿到手的数据完整性很高。几个真实存在的坑提前说清楚这个项目不是开箱即用的傻瓜工具有三件事你最好有心理准备第一别拿它做大规模商业采集。项目采用 GPL-3.0 协议README 里明确写了仅限学习交流使用禁止商用。频繁的高并发请求也会给目标网站造成负担控制频率既是技术需求也是基本素养。第二cookie 是会失效的。程序启动后如果提示cookie 失效或者被限制访问多半是登录态过期了重新登录后更新config.ini里的 Cookie 字段即可。cookie 池模式下全部 cookie 失效时程序会等待并提示不会假装正常运行。第三别指望零配置。三十多个参数意味着有一定学习曲线但作者把文档写得很细docs/目录下按主题拆成了 cookie 池、代理、数据格式、加密接口等独立文档。第一次跑建议need_pages 1先把链路走通再逐步加量。这条路还能走多远大众点评的字体加密不是一成不变的它换过字体、换过 SVG 布局未来还可能换新的花样。但这个项目给出的方法论是通用的拿到页面先找字体线索解析字形和真实字符的对应关系再替换回明文。这套思路对任何采用字体反爬的网站都成立学会它比记住某一个网站的补丁更有价值。项目的开发计划里还列着 cookie 动态更新和优惠券信息采集说明维护者还在持续跟进。如果你是做市场调研、竞品分析或者爬虫技术研究的人不妨从这个小而完整的项目入手先读懂utils/get_font_map.py的每一行再亲手跑通一次采集你会发现所谓的反爬难题拆开看也不过是一环扣一环的工程问题。从 1 页搜索开始祝你第一次跑通就拿到干净的数据。【免费下载链接】dianping_spider大众点评爬虫全站可爬解决动态字体加密非OCR。持续更新项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价