news 2026/6/12 10:25:55

大众点评爬虫实战:3大技术突破解决动态字体加密与反爬难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大众点评爬虫实战:3大技术突破解决动态字体加密与反爬难题

大众点评爬虫实战:3大技术突破解决动态字体加密与反爬难题

【免费下载链接】dianping_spider大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider

大众点评作为国内领先的本地生活服务平台,其复杂的反爬机制一直是数据工程师和爬虫开发者面临的重要挑战。本项目提供了一个完整的Python爬虫解决方案,专门针对大众点评的动态字体加密、请求签名验证和多层防护体系,实现了全站数据的稳定采集。通过创新的非OCR字体映射解析技术和智能代理管理策略,成功突破了平台的多层反爬机制。

技术挑战深度剖析:从攻击者视角看大众点评反爬体系

大众点评的反爬体系已经发展到L4级成熟度,形成了多层次的防护网络。从技术实现角度来看,主要面临以下核心挑战:

动态字体加密技术

平台采用Web Font技术对关键数据进行加密显示,传统的爬虫获取到的页面中,评分、价格、地址等信息显示为乱码字符。这种加密方式不仅动态变化,而且每个页面可能使用不同的字体文件,增加了破解难度。

请求签名验证机制

API请求需要携带动态生成的签名参数,包含时间戳、设备信息等加密数据。签名算法复杂且定期更新,传统的模拟请求方式无法通过验证。

行为模式识别系统

基于用户操作序列的异常行为检测系统,能够识别自动化脚本的访问模式。包括请求频率、鼠标轨迹、点击模式等多维度分析。

IP频率限制策略

基于IP请求频率的封禁策略,对高频访问进行实时监控和拦截,需要智能的代理管理和请求间隔控制。

创新技术原理详解:字体加密逆向解析与签名算法

字体映射解析核心技术

在字体映射解析模块中,项目通过解析字体文件的字形特征建立编码映射表,避免了传统OCR方案的速度慢、准确率低的问题。

图:大众点评爬虫字体加密破解前后的数据对比,左侧为加密显示,右侧为解密后的真实店铺信息

核心实现位于字体映射解析模块中,采用以下技术路线:

  1. 字体文件提取:从页面CSS中解析字体文件URL,自动下载最新的字体文件
  2. 字体特征分析:使用fontTools解析TTF/OTF字体文件,提取字形轮廓数据
  3. 字形映射建立:通过字形轮廓特征匹配建立编码映射表,实现乱码到真实字符的转换
  4. 动态更新机制:自动检测字体变化并更新映射关系,确保长期可用性
# 字体映射解析核心代码片段 def parse_woff(filename): """解析woff文件,生成xml文件""" saved_name = filename.replace('.woff', '.xml') font_data = TTFont('./tmp/' + filename) font_data.saveXML('./tmp/' + saved_name) return saved_name def parse_xml(filename): """解析xml文件,生成字符映射表""" saved_name = filename.replace('.xml', '.json') # 获取已经处理好的文字映射 data = get_map('./files/template_map.json') # 读取xml文件 with open('tmp/' + filename, 'r', encoding='utf-8') as f: xml_content = f.read() # 找出xml中核心部分 res = re.findall('<GlyphOrder>(.*?)</GlyphOrder>', xml_content, re.S)[0] # 解析文字映射 change_res = re.findall('<GlyphID id=".*?" name="(.*?)"/>', res) final_res = {} # 映射匹配 for i in range(2, 603): tmpstr = 'glyph' + str(i) final_res[change_res[i]] = data[tmpstr] # 保存字典 with open('tmp/' + saved_name, 'w', encoding='utf-8') as f: json.dump(final_res, f, ensure_ascii=False)

请求签名算法逆向工程

通过逆向工程实现了签名算法的Python版本,动态生成符合平台要求的请求参数:

def get_token(shop_url): ts = int(time.time() * 1000) cts = int(time.time() * 1000) - 600 tokens = str({"rId": '100041', "ver": "1.0.6", "ts": ts, "cts": cts, "brVD": [1920, 186], "brR": [[1920, 1080], [1920, 1040], 24, 24], "bI": [shop_url, shop_url], "mT": ["1244,588"], "kT": [], "aT": [], "tT": [], "aM": "", "sign": "eJxTKs7IL/BMsTU2NTAwMLVUAgApvgRP"}).encode() _token = zlib.compress(tokens) token = base64.b64encode(_token).decode() return token

系统架构全新设计:模块化与可扩展性

核心架构设计

项目采用模块化设计,各功能模块职责清晰,形成了完整的爬虫生态系统:

├── function/ # 核心功能模块 │ ├── search.py # 搜索功能实现 │ ├── detail.py # 详情页解析 │ ├── review.py # 评论数据采集 │ └── get_encryption_requests.py # 加密请求处理 ├── utils/ # 工具模块 │ ├── get_font_map.py # 字体映射解析 │ ├── requests_utils.py # 请求工具封装 │ ├── spider_controller.py # 爬虫控制器 │ └── saver/ # 数据存储模块 ├── config.ini # 主配置文件 └── main.py # 程序入口

智能代理池与Cookie管理

为应对IP封禁,项目实现了智能代理池和Cookie池管理:

代理策略对比

  • HTTP代理模式:支持HTTP代理轮换,降低单IP访问频率
  • 密钥代理隧道:支持密钥模式代理,提高代理稳定性
  • 智能重复使用:根据代理有效期智能重复使用,降低代理成本
  • 异常检测机制:实时监控代理状态,自动切换失效代理

Cookie管理策略

  • 多账号轮换:支持多个Cookie账号轮换使用,延长单个账号寿命
  • 动态更新机制:自动检测Cookie失效并更新
  • 智能分配策略:根据任务类型分配不同权限的Cookie

数据采集流程设计

项目支持三种采集模式,满足不同场景需求:

完整流程模式:搜索→详情→评论(默认模式)详情页模式:仅采集指定店铺的详细信息评论模式:仅采集指定店铺的用户评论

图:大众点评搜索结果数据结构,包含店铺名称、评分、评论数、价格等关键字段的完整采集效果

实战部署与性能优化

环境配置与安装

项目基于Python 3开发,依赖库简洁明了,支持一键安装:

# 一键安装依赖 pip install -r requirements.txt # 主要依赖库 - lxml # HTML解析 - requests # HTTP请求 - fontTools # 字体文件解析 - pymongo # MongoDB存储 - beautifulsoup4 # HTML解析 - faker # 随机数据生成

配置文件详解

在配置文件中,提供了丰富的配置选项,支持灵活的爬虫策略调整:

[config] # 是否使用cookie池 use_cookie_pool = False # cookie信息 Cookie = your_cookie_here # 保存方式(支持mongo) save_mode = mongo # 请求频率控制 requests_times = 1,2;3,5;10,50 [detail] # 搜索关键词 keyword = 自助餐 # 地区ID location_id = 8 # 需要搜索的页数 need_pages = 5 [proxy] # 是否使用代理 use_proxy = False # 代理模式 http_extract = True

运行模式选择

项目提供灵活的CLI参数控制,支持多种运行模式:

# 完整流程(搜索->详情->评论) python main.py # 仅采集详情页 python main.py --normal 0 --detail 1 --shop_id k30YbaScPKFS0hfP # 仅采集评论 python main.py --normal 0 --review 1 --shop_id k30YbaScPKFS0hfP # 采集详情和评论 python main.py --normal 0 --detail 1 --review 1 --shop_id k30YbaScPKFS0hfP

性能优化策略

并发控制优化:合理设置requests_times参数,减少触发频率限制代理质量监控:使用高匿代理,定期检测可用性,提高采集成功率缓存策略设计:字体映射文件本地缓存,减少重复解析时间错误重试机制:智能重试机制,失败自动切换代理和Cookie

数据采集效果与商业应用价值

数据字段完整性

项目采集的数据字段全面且结构化,涵盖多个维度:

基础信息维度:店铺名称、评分、评论数、人均价格位置信息维度:地址、区域、坐标、联系方式经营信息维度:营业时间、联系电话、推荐菜、品类标签用户评价维度:评论内容、评分、时间、点赞数、回复数

图:店铺详情JSON数据结构展示,包含完整的店铺信息和评分维度

评论数据分析深度

评论数据采集不仅包含基础内容,还支持深度分析:

用户行为分析:评分分布、评论时间分布、用户活跃度情感分析支持:评论内容情感倾向、关键词提取图片数据采集:用户上传的菜品和环境图片商家互动分析:商家回复情况、问题处理效率

图:用户评论JSON数据结构,包含完整的用户信息和互动数据

实际应用场景

通过本爬虫系统,可以支持多种商业分析场景:

竞争格局分析:同区域同类店铺数量、评分分布、价格区间对比用户偏好挖掘:评论情感分析、热门标签提取、消费趋势预测市场趋势研究:新店增长趋势、热门品类变化、季节性消费特征投资决策支持:为投资机构提供餐饮行业数据支持,评估店铺价值

图:用户评论数据深度分析界面,包含评分分布、评论词频统计等维度

数据存储方案

支持多种存储方式,推荐使用MongoDB实现灵活的数据管理:

# MongoDB存储配置示例 save_mode = mongo mongo_path = mongodb://localhost:27017/dianping # 数据结构示例 { "shop_id": "k30YbaScPKFS0hfP", "shop_name": "海底捞火锅", "rating": 4.8, "review_count": 1250, "avg_price": 120, "address": "北京市朝阳区xxx", "phone": "010-xxxxxxx", "business_hours": "10:00-22:00", "recommended_dishes": ["毛肚", "虾滑", "牛肉"], "reviews": [...] }

技术趋势与社区生态展望

技术演进方向

AI驱动的反爬对抗:基于机器学习的反爬策略识别与智能应对分布式采集架构:支持大规模分布式部署,提高采集效率和稳定性实时数据更新:实现增量采集和实时数据同步,支持动态监控智能异常检测:基于历史数据的异常行为预测和自动修复机制

应用场景拓展

随着技术的不断完善,本爬虫系统可以拓展到更多应用场景:

商业智能分析:为餐饮企业提供竞争情报和市场分析报告城市规划参考:为城市商业布局和商圈规划提供数据依据学术研究数据:为社会科学研究提供真实消费行为数据投资风险评估:为投资机构提供餐饮行业风险评估数据支持

社区生态建设

项目采用GPL-3.0开源协议,欢迎社区贡献和技术交流:

插件扩展开发:支持更多数据存储后端和数据处理插件算法优化改进:持续改进字体解析和请求签名算法文档完善更新:丰富使用文档、教程和最佳实践指南生态工具开发:开发数据可视化、分析工具和监控系统

技术实现难点与解决方案

字体加密相关挑战

难点:字体文件动态变化,映射关系不固定解决方案:实时解析CSS中的字体链接,动态建立映射表

难点:字体文件下载失败或解析错误解决方案:多重错误处理机制,自动重试和降级处理

请求限制应对策略

难点:频繁出现403错误或被封禁解决方案:智能代理轮换 + Cookie池管理 + 请求频率控制

难点:验证码频繁出现解决方案:人工干预机制 + 高质量代理IP + 请求头优化

数据采集稳定性

难点:页面结构频繁更新导致解析失败解决方案:模块化解析器设计 + 自动适配机制 + 人工更新接口

难点:评论数据采集不完整解决方案:智能分页解析 + 异常重试机制 + 数据完整性校验

项目部署与维护指南

快速部署步骤

  1. 环境准备:安装Python 3.6+和MongoDB
  2. 依赖安装:运行pip install -r requirements.txt
  3. 配置调整:修改config.ini中的Cookie和代理设置
  4. 数据库配置:设置MongoDB连接信息
  5. 运行测试:使用示例关键词进行测试运行

日常维护建议

监控日志:定期检查运行日志,及时发现异常更新Cookie:定期更新Cookie池,避免账号失效代理管理:监控代理质量,及时更换失效代理字体映射:关注字体文件变化,必要时手动更新模板

故障排除指南

字体解析失败:检查网络连接,确认字体文件可访问请求频繁被拒:降低请求频率,更换代理IP数据字段缺失:检查页面结构变化,更新解析规则存储异常:检查数据库连接,确认存储权限

结语:技术创新的价值与意义

大众点评爬虫项目通过创新的技术方案,成功突破了平台的多层反爬机制,为数据采集领域提供了宝贵的技术实践。项目不仅解决了字体加密、请求签名等核心技术难题,还提供了完整的工程化解决方案,包括代理管理、错误处理、数据存储等模块。

对于技术开发者和数据工程师而言,本项目不仅是实用的数据采集工具,更是学习现代反爬对抗技术的优秀案例。通过研究本项目,可以深入了解Web字体加密原理、请求签名机制、代理池设计等关键技术,为应对其他网站的反爬挑战提供技术参考。

项目的开源特性也为技术社区提供了学习和交流的平台,促进了反爬技术的发展和创新。随着技术的不断演进,本项目将继续完善和优化,为数据采集领域贡献更多价值。

核心技术创新点总结

  1. 非OCR字体映射技术:避免了传统OCR方案的速度和准确率问题
  2. 动态签名算法逆向:实现了复杂请求签名的Python版本
  3. 智能代理管理系统:多策略代理轮换和异常检测机制
  4. 模块化架构设计:高内聚低耦合,便于扩展和维护
  5. 完整的数据采集链:从搜索到详情再到评论的全流程支持

通过本项目的实践,我们可以看到在复杂反爬环境下,技术创新和工程化解决方案的重要性。这不仅是一个爬虫项目,更是对抗现代Web防护系统的技术演练场,为相关领域的研究和实践提供了宝贵的经验。

【免费下载链接】dianping_spider大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 10:24:59

PotPlayer字幕翻译插件:5分钟搞定外语视频实时翻译的完整指南

PotPlayer字幕翻译插件&#xff1a;5分钟搞定外语视频实时翻译的完整指南 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为看不懂…

作者头像 李华
网站建设 2026/6/12 10:24:01

告别干扰!用IEEE 802.15.4z的CS脉冲优化你的UWB多设备网络

告别干扰&#xff01;用IEEE 802.15.4z的CS脉冲优化你的UWB多设备网络在智能工厂的自动化流水线上&#xff0c;三十台AGV小车正通过UWB信号实时定位&#xff1b;隔壁仓库的五百个智能货架每隔0.5秒广播一次库存状态&#xff1b;办公区的两百个工位标签持续发送存在信号——当UW…

作者头像 李华
网站建设 2026/6/12 10:23:56

Prompt即协议:构建可编排、可验证的LLM基础设施层

1. 项目概述&#xff1a;当提示词不再只是“输入”&#xff0c;而成为系统协议“Prompt to Protocol”这个标题乍看像一句技术口号&#xff0c;实则直指当前大模型落地最隐蔽也最致命的断层——我们花了九成精力调提示词、写few-shot样例、堆RAG检索逻辑&#xff0c;却把真正决…

作者头像 李华
网站建设 2026/6/12 10:20:51

MusicFree插件三分钟指南:解锁全网免费音乐资源

MusicFree插件三分钟指南&#xff1a;解锁全网免费音乐资源 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 还在为音乐平台的VIP限制而烦恼吗&#xff1f;想要一个真正免费、跨平台的音乐解决方案…

作者头像 李华
网站建设 2026/6/12 10:15:50

如何用Python实现毫秒级精度的京东抢购自动化

如何用Python实现毫秒级精度的京东抢购自动化 【免费下载链接】JDspyder 京东预约&抢购脚本&#xff0c;可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 你是否曾在京东秒杀活动中&#xff0c;因为手速不够快而错失心仪的商品&#xff1…

作者头像 李华