# java+react pachong **Repository Path**: jiayouyc/java-react-pachong ## Basic Information - **Project Name**: java+react pachong - **Description**: pachong小demo,纯ai生成 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-08 - **Last Updated**: 2025-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 爬虫系统 这是一个基于Spring Boot和MyBatis Plus的高级网络爬虫系统,用于自动化抓取和处理网页数据。 ## 系统架构 爬虫系统分为前端和后端两部分: ### 前端 - 使用React框架开发 - 提供用户友好的界面管理爬虫任务 - 支持可视化展示爬取结果 ### 后端 - 基于Spring Boot框架 - 使用MyBatis Plus操作数据库 - 支持动态和静态网页爬取 - 提供REST API接口服务 ## 功能特点 - 支持静态HTML页面爬取(BasicCrawlerEngine) - 支持动态JavaScript渲染页面爬取(DynamicCrawlerEngine) - 自定义爬取规则和数据提取 - 多线程并发爬取 - 代理IP支持 - 智能验证码识别 - 爬取任务调度和监控 - 数据导出(CSV/Excel/JSON) ## 环境要求 - JDK 17+ - Maven 3.6+ - MySQL 8.0+ - Chrome浏览器(用于动态爬取) - NodeJS 14+(前端开发) ## 快速启动 为了方便使用,我们提供了一系列批处理脚本来简化项目的启动过程: ### 1. 初始化数据库 运行 `init_database.bat` 脚本初始化数据库。这将创建所需的数据库和表结构,并添加初始管理员账户。 ``` init_database.bat ``` 默认管理员账户: - 用户名:admin - 密码:admin123 ### 2. 启动后端服务 运行 `start_backend.bat` 脚本启动后端服务。 ``` start_backend.bat ``` ### 3. 启动前端服务 运行 `start_frontend.bat` 脚本启动前端开发服务器。 ``` start_frontend.bat ``` ### 4. 访问系统 前端服务启动后,在浏览器中访问: ``` http://localhost:5173 ``` ## 安装指南(手动方式) ### 后端设置 1. 克隆代码库 ``` git clone cd pachong ``` 2. 配置数据库 - 创建MySQL数据库:`crawler_system` - 修改`backend/src/main/resources/application.yml`中的数据库连接信息 3. 编译运行后端 ``` cd backend mvn clean package -Dmaven.test.skip=true java -jar target/system-1.0.0.jar ``` ### 前端设置 1. 安装依赖 ``` cd frontend npm install ``` 2. 运行开发服务器 ``` npm run dev ``` ## 使用指南 ### 创建爬虫任务 1. 在系统中创建新的爬虫任务 2. 设置目标URL和爬取参数 3. 选择爬虫类型(静态/动态) 4. 设置爬取规则 5. 启动任务 ### 查看爬取结果 1. 在任务管理页面查看任务状态 2. 点击任务查看详细结果 3. 可导出结果为CSV/Excel/JSON格式 ## API文档 API文档可通过Swagger UI访问: ``` http://localhost:8080/api/swagger-ui.html ``` ## 问题排查 如果遇到以下问题: 1. Maven构建失败 - 检查Maven版本和环境变量 - 可尝试使用项目内置的Maven Wrapper:`./mvnw clean package` 2. 数据库连接问题 - 确认MySQL服务正在运行 - 验证连接信息是否正确 - 检查数据库用户权限 3. 浏览器驱动问题 - 确保Chrome浏览器已安装 - 下载与Chrome版本匹配的ChromeDriver - 将ChromeDriver路径设置在配置文件中 ## 修复日志 ### 2023-06-10 修复 - 修复了pom.xml中的XML标签错误 ( 修改为 ) - 修复了主应用程序文件中的注释乱码问题 - 创建了前端API目录结构,添加了API服务文件 - 补充了工具函数库 - 修复了所有实体类中的乱码问题 - 添加了数据库初始化脚本 - 添加了项目启动脚本 ### 2023-06-15 修复 - 修复了批处理文件中的中文乱码问题,添加了UTF-8编码支持 - 修复了Java代码文件中的中文注释和字符串乱码问题 - 删除了重复的CommonResult类,保留了dto包下的版本 - 创建了MyBatis映射文件目录和必要的映射文件 - 改进了数据库初始化脚本,添加了更好的错误处理 ### 2023-06-20 修复 - 修复了控制器文件中的中文编码问题,包括ProxyIpController.java和CrawlerController.java - 修复了LoginDTO.java中的中文编码问题 - 修正了未结束的字符串文字和其他编译错误 - 统一了CommonResult类的引用,从common包改为dto包 - 优化了控制器中的代码结构和注释 ### 2023-06-25 修复 - 修复了DynamicCrawlerEngine.java中找不到getConfig()方法的问题 - 在CrawlerTask实体类中添加了config字段,用于存储爬虫任务的配置信息 - 创建了DynamicPageParamsDTO类,用于存储动态页面参数 - 创建了PageInteractionDTO类,用于存储页面交互操作 - 更新了CrawlerTaskMapper.xml文件,添加了config字段 - 添加了数据库升级脚本,用于添加config字段 ### 2023-06-30 修复 - 修复了DynamicCrawlerEngine.java中找不到getElementWaits()方法的问题 - 修改了DynamicPageParamsDTO类,将waitForElements字段改为elementWaits - 创建了ElementWaitDTO类,用于配置等待元素的参数 - 更新了PageInteractionDTO类,添加了order、script、scrollX、scrollY字段 - 修复了编译错误,确保所有DTO类的字段与引擎代码一致 ### 2023-07-01 修复 - 修复了PageResult.java中List.of()方法不兼容的问题 - 使用Collections.emptyList()替代List.of(),提高代码兼容性 - 修复了PageResult.java中的中文编码问题 ### 2023-07-02 修复 - 修复了Spring Bean定义冲突问题 - 移除了BasicCrawlerEngine类上的@Service注解,避免与CrawlerConfig中的@Bean定义冲突 - 在application.yml中添加了spring.main.allow-bean-definition-overriding=true配置 ### 2023-07-03 修复 - 修复了ProxyIpService Bean未找到的问题 - 创建了ProxyIpServiceImpl类,实现ProxyIpService接口 - 添加了代理IP相关的CRUD操作和业务逻辑实现 - 实现了代理IP的验证、使用记录等功能 ### 2023-07-04 修复 - 修复了ProxyIp实体类中缺失的字段 - 添加了lastUsedTime、successCount、failCount、avgResponseTime字段 - 修改了recordProxyUsage方法,使用正确的字段名和类型 - 修改了batchImportProxies方法,使用insertBatchSomeColumn方法进行批量插入 - 优化了代理IP使用记录的统计逻辑 ### 2023-07-05 修复 - 修复了ProxyIpServiceImpl中的编译错误 - 添加了缺失的LocalDateTime导入 - 将insertBatchSomeColumn方法改为saveBatch方法 - 完善了分页查询逻辑,支持多条件查询 - 实现了代理IP验证和状态更新逻辑 - 优化了代理IP使用记录的统计逻辑 - 添加了代理IP自动失效机制(连续失败5次) - 完善了随机代理IP获取逻辑 - 添加了代理IP自动发现的框架代码 ### 2023-07-06 修复 - 修复了PageResult泛型类型推断问题 - 修改了批量导入代理IP的实现方式,改用循环插入 - 优化了分页查询的返回类型声明 - 完善了错误处理和日志记录 ### 2023-07-07 修复 - 修复了PageResult构造函数参数类型不匹配的问题 - 将Page对象的long类型返回值转换为对应的包装类型 - 优化了分页查询的类型转换逻辑 ## 许可证 [MIT License](LICENSE)