一、立项背景和目标
北京新发地农产品批发市场作为全国交易规模最大的农产品专业批发市场,其官网每日发布大量蔬菜、水果等农产品的价格行情数据,涵盖品名、规格、产地、价格区间、发布日期等关键信息。这些价格行情数据分散在多个列表页面中,人工逐条复制品名、最低价、平均价、最高价、规格、产地、单位、发布日期等信息录入 Excel 表格工作量大、效率低下,且分页翻阅统计困难。本项目立项目标:基于 Playwright 自动化浏览器抓取北京新发地农产品批发市场官网多页价格行情数据,自动解析字段并写入 Excel 文件,实现农产品价格数据批量结构化导出,方便后续价格趋势分析、产地分布统计与市场行情归档,同时掌握动态网页分页爬取、XPath 层级定位、openpyxl 表格持久化存储的完整爬虫开发流程。
二、软件功能、核心功能模块介绍
三大核心功能模块
(1)Excel 表格初始化模块:使用 openpyxl 库新建工作簿,创建名为“新发地价格行情”工作表,预先写入表头【一级分类、二级分类、品名、最低价、平均价、最高价、规格、产地、单位、发布日期】,智能设置各列宽度确保数据完整显示,定义全局列表用于临时存储抓取到的结构化数据,为后续数据落地做准备。
(2)浏览器自动化页面交互模块:调用 Playwright 启动本地 Chromium 浏览器,配置可视化运行窗口、操作减速防反爬;自动访问北京新发地农产品批发市场官网价格行情栏目,支持按分类筛选(蔬菜、水果等),自动识别总页数并循环执行分页加载逻辑,每页设置合理等待时间,保证后端动态渲染的价格列表完整加载。
(3)数据解析与表格写入模块:通过层级 XPath 定位每一条价格行情数据 DOM 容器,循环提取一级分类、二级分类、品名、最低价、平均价、最高价、规格、产地、单位、发布日期;增加智能字段清洗逻辑,过滤异常数据和空值,逐条将字段追加写入 Excel 工作表,提供数据去重机制避免重复记录,最终完整保存为本地表格文件。
三、业务流程、功能路径描述
(1)程序初始化:创建 Excel 文件、新建工作表并设置表头及列宽;配置本地 Chromium 浏览器启动路径与反爬兼容参数;提示用户选择需要爬取的农产品分类(默认全部分类);
(2)自动化访问目标网站:打开北京新发地农产品批发市场官网价格行情页面,等待页面完全加载后,通过 XPath 定位分类筛选下拉菜单,根据用户选择模拟点击切换分类,等待列表数据刷新;
(3)分页循环抓取:自动解析总页数,循环执行分页爬取,每一页等待 3-5 秒确保列表数据 JS 渲染完成;定位所有价格行情条目父级容器,获取当前页条目数量;
(4)逐条解析字段:遍历每条条目 DOM 节点,分别提取一级分类、二级分类、品名、最低价、平均价、最高价、规格、产地、单位、发布日期,清洗字符串去除空白字符和无
1. 整体架构和设计思路,不同模块使用的技术栈
整体架构
采用 Python 单文件线性执行架构,自上而下分为四层:文件持久化层 → 浏览器驱动层 → 页面交互层 → 数据提取存储层,逻辑简单直观,轻量化无额外中间件,适合小型定向垂直网站数据采集。整体运行流程为:初始化 Excel → 启动浏览器 → 访问目标 URL → 选择分类 → 循环翻页 → 逐条解析 → 写入 Excel → 关闭浏览器。
各模块技术栈
模块 技术选型 用途说明
开发语言 Python 3.12 主编程语言,提供丰富库支持
浏览器自动化 Playwright 同步 API 驱动 Chromium 内核浏览器(本地 Edge/Chrome),解决价格行情列表动态 JS 渲染、接口异步加载无法用静态 requests 抓取的问题;配置 slow_mo 操作延时、wait_for_timeout 页面等待,模拟真人访问行为,规避反爬机制
数据持久化 openpyxl 用于新建 Excel 工作簿、创建工作表、表头写入、行数据追加、列宽设置、本地文件保存,生成可直接打开编辑的 .xlsx 文件
元素定位 绝对路径 + 相对层级 XPath 表达式 通过父容器批量定位 + 内部相对路径二次提取,精准嵌套定位每条价格条目内的品名、价格、规格、产地、日期等子字段
辅助逻辑 while 循环实现自动翻页(直至末页)、try-except 容错处理过滤缺失字段、条件判断进行数据去重和异常值清洗,确保数据质量
2. 本人负责模块与量化成果
本项目为个人独立全流程开发,全权完成代码编写、页面元素调试、分页逻辑、Excel 写入、数据清洗、边界条件限制全部工作:
完成 Chromium 浏览器适配启动配置,支持本地 Edge 或 Chrome 调用,解决自动化操作过快被网站风控拦截的问题(通过 slow_mo=300 和随机延时模拟人类浏览);
编写首页访问、分类菜单点击(支持蔬菜、水果等分类切换)的自动化交互逻辑,并实现页面加载完成后的等待机制;
设计动态分页抓取方案:自动解析页面底部总页数信息,使用 while 循环逐页抓取,每页设置 3-5 秒等待时间保障数据加载完整性;
编写多层嵌套 XPath 定位规则,拆解十个目标字段(一级分类、二级分类、品名、最低价、平均价、最高价、规格、产地、单位、发布日期),对价格字段进行数值格式化(移除“元/斤”等后缀,转换为浮点数),对空值和异常字符进行智能清洗与默认值填充;
对接 openpyxl 实现自动建表、表头填充、列宽自适应、逐条数据追加写入,并在写入前进行去重校验,避免同一数据重复记录;
增加异常处理机制:当某条数据缺失关键字段(如品名或价格)时自动跳过并记录日志,不中断整体抓取流程。
量化成果:可稳定抓取全部分页(通常 30-50 页