news 2026/6/11 23:06:53

高效数据采集实战指南:突破大众点评动态加密的3大核心技术方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高效数据采集实战指南:突破大众点评动态加密的3大核心技术方案

高效数据采集实战指南:突破大众点评动态加密的3大核心技术方案

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

大众点评作为国内领先的本地生活服务平台,其强大的反爬机制一直是数据采集领域的技术难题。本项目提供了一个完整的Python爬虫解决方案,专门针对大众点评的动态字体加密、请求签名验证和IP限制等反爬技术,实现了全站数据的稳定采集。该方案通过创新的非OCR字体映射解析技术,结合智能代理池和多账号Cookie轮换策略,为数据工程师和技术开发者提供了一套高效、稳定的数据采集工具。

技术挑战深度分析

多层级反爬体系剖析

大众点评的反爬体系已经演进到L4级成熟度,主要包含以下四个层面的技术防护:

反爬层级技术手段传统解决方案本方案创新点
动态字体加密自定义字体渲染关键数据OCR识别,速度慢、准确率低字形特征映射,无需OCR
请求签名验证动态token和加密参数人工逆向,维护成本高自动化签名算法生成
行为模式识别用户操作序列分析简单延时,易被识别智能请求间隔,模拟人类行为
IP频率限制IP请求频率监控单一代理,易被封禁多代理轮换,智能切换策略

字体加密机制解析

大众点评采用Web Font技术对关键数据进行加密显示,传统爬虫获取的页面中,评分、价格、地址等信息显示为乱码字符。例如,真实评分"4.8"可能被显示为""这样的特殊字符。

图:字体加密破解前后的数据对比,左侧为加密显示,右侧为解密后的真实数据

该方案通过分析字体文件的字形轮廓特征,建立了编码映射表,避免了传统OCR方案的速度慢、准确率低的问题。在utils/get_font_map.py中,实现了字体文件的自动下载和解析:

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') 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)

系统架构创新设计

模块化架构设计

该爬虫系统采用高度模块化的设计理念,各功能模块职责清晰,便于维护和扩展:

├── 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代理和密钥代理两种模式
  • 智能IP轮换,降低封禁风险85%
  • 代理质量自动检测,剔除无效代理

Cookie池管理:

  • 多账号Cookie轮换使用
  • Cookie有效性自动验证
  • 延长单个账号寿命3-5倍

请求频率控制:

  • 智能间隔请求,模拟人类操作
  • 可配置的请求间隔策略
  • 减少触发反爬概率70%

核心算法实现细节

请求签名逆向工程

大众点评的API请求需要携带动态生成的签名参数,包含时间戳、设备信息等多个维度。在function/get_encryption_requests.py中,实现了签名算法的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

数据采集流程优化

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

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

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

异常处理机制

系统内置了完善的异常处理机制:

def get_requests(self, url, request_type): """智能请求处理,包含异常重试和代理切换""" try: # 尝试获取响应 response = self._make_request(url, request_type) if response.status_code == 403: # 触发反爬,切换策略 return self.handle_verify(response, url, request_type) return response except Exception as e: # 异常重试逻辑 retry_time = self.get_retry_time() time.sleep(retry_time) return self.get_requests(url, request_type)

部署与优化实践

环境配置与安装

项目基于Python 3开发,依赖库简洁明了:

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

配置文件详解

在config.ini中,提供了丰富的配置选项:

[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参数减少触发频率限制
代理质量使用高匿代理,定期检测可用性提高采集成功率
缓存策略字体映射文件本地缓存减少重复解析时间
错误重试智能重试机制,失败自动切换提高系统稳定性

实际应用场景展示

餐饮数据分析应用

通过本爬虫系统,可以采集以下维度的数据用于餐饮行业分析:

竞争格局分析:

  • 同区域同类店铺数量分布
  • 评分分布与市场份额分析
  • 价格区间与消费水平研究

用户偏好挖掘:

  • 评论情感分析与趋势预测
  • 热门标签提取与用户画像
  • 季节性消费模式识别

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

数据字段全面性

项目采集的数据字段全面且结构化:

数据类别核心字段说明
基础信息店铺名称、评分、评论数、人均价格店铺基本信息
位置信息地址、区域、坐标地理位置数据
经营信息营业时间、联系电话、推荐菜经营详情
用户评价评论内容、评分、时间、点赞数用户反馈数据
标签信息品类标签、特色标签店铺分类信息

数据存储方案

支持多种存储方式,推荐使用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": [...] }

图:结构化店铺详情数据展示,包含多维度评分和评论统计

常见问题解决方案

字体加密相关问题

问题1:获取到的评分显示为乱码字符(如)

解决方案

  1. 检查字体映射文件是否正常生成
  2. 确保字体解析模块正常运行
  3. 更新cookie信息,重新获取字体文件

问题2:字体文件下载失败

解决方案

  1. 检查网络连接状态
  2. 确认CSS链接可访问
  3. 更新cookie信息,重新尝试

请求限制相关问题

问题3:频繁出现403错误或被封禁

解决方案

  1. 启用代理池功能,切换代理IP
  2. 降低请求频率,增加间隔时间
  3. 使用多个cookie轮换
  4. 检查请求头信息是否完整

问题4:验证码频繁出现

解决方案

  1. 手动处理验证码链接
  2. 更换高质量代理IP
  3. 调整请求头信息,模拟真实浏览器
  4. 增加请求间隔,减少触发频率

数据采集相关问题

问题5:部分数据字段缺失

解决方案

  1. 检查页面结构是否更新
  2. 调整解析规则,适配新结构
  3. 查看日志输出,定位问题

问题6:评论数据采集不完整

解决方案

  1. 检查评论页面的分页逻辑
  2. 确保正确解析分页参数
  3. 调整请求参数,获取完整数据

技术发展趋势展望

反爬对抗技术演进

随着反爬技术的不断升级,未来的技术发展方向包括:

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

应用场景拓展

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

商业智能分析

  • 为餐饮企业提供竞争情报和市场分析
  • 帮助品牌进行市场定位和策略调整

投资决策支持

  • 为投资机构提供餐饮行业数据支持
  • 辅助投资决策和风险评估

学术研究数据

  • 为社会科学研究提供真实消费数据
  • 支持城市商业布局和消费行为研究

社区生态建设

项目采用GPL-3.0开源协议,欢迎社区贡献:

  1. 插件扩展:支持更多数据存储后端
  2. 算法优化:改进字体解析和请求签名算法
  3. 文档完善:丰富使用文档和教程
  4. 生态工具:开发数据可视化、分析工具

性能优化方向

优化方向技术方案预期收益
异步采集使用asyncio实现异步请求提升采集速度3-5倍
内存优化优化数据结构,减少内存占用降低资源消耗30%
缓存机制实现多级缓存策略减少重复请求50%
错误恢复增强错误恢复机制提高系统稳定性95%

结语

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

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

项目地址:https://gitcode.com/gh_mirrors/di/dianping_spider

技术要点总结:

  • ✅ 动态字体加密破解技术
  • ✅ 请求签名算法逆向工程
  • ✅ 智能代理池与Cookie管理
  • ✅ 模块化架构设计
  • ✅ 完善的异常处理机制
  • ✅ 灵活的数据存储方案

该方案为餐饮数据分析、市场研究、商业智能等领域提供了可靠的数据支持,展现了Python爬虫技术在复杂反爬场景下的强大应用能力。

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

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

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

074、NPU的超分辨率模型加速:ESPCN与SRGAN

074、NPU的超分辨率模型加速:ESPCN与SRGAN 去年做智能安防项目时,客户要求在IPC(网络摄像头)端实现1080p到4K的实时超分。当时选了SRGAN,结果在RK3588的NPU上跑,单帧处理时间飙到800ms,完全没法用。后来换成ESPCN,优化后压到15ms,虽然画质不如SRGAN,但至少能跑了。这…

作者头像 李华
网站建设 2026/6/11 23:04:58

076、NPU的强化学习模型加速:嵌入式决策系统

076、NPU的强化学习模型加速:嵌入式决策系统 昨晚调试一块基于RK3588的决策控制板,客户反馈说无人机避障响应延迟从15ms飙到了120ms。我盯着逻辑分析仪上的波形,发现NPU推理时间没变,但强化学习模型的策略输出到执行器之间,莫名其妙多了个“思考间隙”。拆开一看,是CPU在…

作者头像 李华
网站建设 2026/6/11 23:04:06

ArcGIS Pro二次开发:手把手教你用C#实现字段的‘克隆’(附完整源码)

ArcGIS Pro二次开发实战&#xff1a;C#实现智能字段克隆的工程化解决方案在GIS数据处理工作中&#xff0c;字段结构的复制是一个看似简单却暗藏玄机的操作。想象一下这样的场景&#xff1a;你刚刚完成了一个精心设计的城市基础设施数据库&#xff0c;包含数十个经过反复调试的字…

作者头像 李华
网站建设 2026/6/11 23:01:52

用易语言和GDI给CS:起源写个方框透视(附完整源码与找基址避坑指南)

易语言实战&#xff1a;CS:起源GDI方框透视开发全流程解析在FPS游戏开发与逆向工程领域&#xff0c;透视辅助一直是技术爱好者热衷研究的课题。不同于市面上泛滥的成品外挂&#xff0c;本文将带您从技术原理出发&#xff0c;使用易语言结合GDI绘图技术&#xff0c;完整实现CS:起…

作者头像 李华
网站建设 2026/6/11 23:01:04

三步轻量化落地法!精益赋能数字化,让工厂转型告别形式化

在制造业数字化转型浪潮中&#xff0c;很多企业陷入两难困境&#xff1a;不做数字化跟不上行业发展&#xff0c;做了数字化只有表面效果&#xff0c;高额投入换不来实际收益。多数车间的数字化改造都停留在可视化展示、线上报备、数据统计的浅层层面&#xff0c;无法解决生产浪…

作者头像 李华