# hongyan_crawler **Repository Path**: lss_web/hongyan_crawler ## Basic Information - **Project Name**: hongyan_crawler - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-01 - **Last Updated**: 2026-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VIN零件树爬虫项目 ## 项目概述 这是一个用于批量爬取车辆VIN码零件树结构的爬虫系统,能够自动验证VIN码有效性并保存完整的零件层级结构到MySQL数据库。 ## 功能特性 ✅ **批量VIN码查询**: 支持MD000001-MD999999及LD/JD/HD/KD系列 ✅ **VIN码验证**: 自动验证VIN码是否有效 ✅ **零件树提取**: 递归解析完整的零件层级结构 ✅ **MySQL存储**: 结构化存储VIN记录和零件树数据 ✅ **断点续传**: 支持中断后从任意位置继续 ✅ **日志记录**: 详细的运行日志和统计信息 ✅ **测试模式**: 提供测试版本验证功能 ## 项目文件 ``` hongyan_crawler/ ├── vin_parts_crawler.py # 完整爬虫程序 ├── vin_parts_crawler_test.py # 测试版本 ├── quick_start.py # 快速启动脚本 ├── requirements.txt # Python依赖 ├── init_database.sql # 数据库初始化脚本 ├── 快速开始.md # 快速入门指南 ├── VIN爬虫使用说明.md # 详细使用说明 ├── vin_crawler.log # 运行日志(自动生成) ├── cat3.html # VIN查询示例页面 ├── d.html # 零件树示例页面 └── README.md # 本文件 ``` ## 技术栈 - **Python 3.7+** - **requests**: HTTP请求 - **BeautifulSoup4**: HTML解析 - **mysql-connector-python**: MySQL数据库连接 - **lxml**: HTML解析器 ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 初始化数据库 ```bash mysql -u root -p < init_database.sql ``` ### 3. 配置数据库连接 编辑 `vin_parts_crawler_test.py`,修改MySQL密码 ### 4. 运行测试 ```bash python vin_parts_crawler_test.py ``` 详细步骤请查看 [快速开始.md](快速开始.md) ## 数据库结构 ### vin_records 表 存储VIN码查询记录 - vin_code: VIN短码 - full_vin: 完整VIN码 - query_status: 查询状态(pending/valid/invalid/completed/no_parts) ### parts_tree 表 存储零件树结构 - vin_code: 所属VIN码 - level: 层级(1,2,3...) - parent_id: 父节点ID(自引用外键) - code: 零件编码 - name: 零件名称 - text: 完整文本描述 ## 使用示例 ### 测试模式 ```python # vin_parts_crawler_test.py test_vins = ['MD000001', 'MD000002', 'MD000003'] crawler.run_test(test_vins) ``` ### 完整模式 ```python # vin_parts_crawler.py crawler.run(start_from=0) # 从头开始 crawler.run(start_from=5000) # 从第5000个继续 ``` ### SQL查询示例 ```sql -- 查看统计 SELECT * FROM vin_statistics; -- 查询零件树 SELECT * FROM parts_tree WHERE vin_code = 'MD000003' ORDER BY level, sort_order; -- 导出层级结构 SELECT p.level, p.name, p.code, parent.name as parent FROM parts_tree p LEFT JOIN parts_tree parent ON p.parent_id = parent.id WHERE p.vin_code = 'MD000003'; ``` ## 工作流程 ``` 1. 生成VIN码列表 ↓ 2. 查询VIN码有效性 (search?q=VIN&t=VIN) ↓ 3. 如果有效 → 进入目录页面 (vin/vin/usage?t=VIN) ↓ 4. 解析零件树结构 (递归解析navigation-tree) ↓ 5. 保存到MySQL数据库 (vin_records + parts_tree) ↓ 6. 继续下一个VIN码 ``` ## 性能说明 - **请求间隔**: 默认1秒/请求 - **预计耗时**: MD系列999,999个VIN码约需11.5天 - **数据库大小**: 每个VIN约100-500个零件节点 - **内存占用**: 低,流式处理 ## 注意事项 ⚠️ **Cookie有效期**: 需要定期更新Cookie ⚠️ **请求频率**: 不要设置过快,避免被封IP ⚠️ **数据量**: 完整爬取需要大量时间和存储空间 ⚠️ **断点续传**: 建议定期记录进度 ## 常见问题 ### Cookie过期怎么办? 1. 重新登录系统 2. 从浏览器开发者工具复制新Cookie 3. 更新代码中的cookies配置 ### 如何中断后继续? 修改 `start_from` 参数为已处理的VIN数量 ### 如何加快爬取速度? - 减少请求间隔(有风险) - 使用多线程(需要修改代码) - 只爬取有效VIN码 ## 日志查看 ```bash # 实时查看最新50行日志 Get-Content vin_crawler.log -Wait -Tail 50 # 搜索错误 Select-String -Path vin_crawler.log -Pattern "ERROR" ``` ## 数据导出 ```sql -- 导出为CSV SELECT * FROM parts_tree WHERE vin_code = 'MD000003' INTO OUTFILE 'D:/parts.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; ``` ## 扩展功能建议 - [ ] 多线程并发爬取 - [ ] 代理IP支持 - [ ] 增量更新机制 - [ ] Web界面监控 - [ ] 数据可视化 - [ ] 自动Cookie更新 - [ ] 零件详情爬取 - [ ] 数据对比分析 ## 许可证 本项目仅供学习研究使用 ## 联系方式 如有问题,请查看: - [快速开始.md](快速开始.md) - 详细使用步骤 - [VIN爬虫使用说明.md](VIN爬虫使用说明.md) - 完整说明文档 --- **创建时间**: 2026-06-01 **Python版本**: 3.7+ **数据库**: MySQL 5.7+