# crawler **Repository Path**: yanghaojou/crawler ## Basic Information - **Project Name**: crawler - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网页抓取系统 - 2.3 Crawler ## 功能说明 实现了文档2.3节要求的网页抓取子系统,具有以下功能: 1. **多线程爬取**:支持并发爬取,提高效率 2. **子链接遍历**:自动发现并爬取同域名下的所有子链接 3. **智能字段提取**:根据School_ontology.xlsx中的字段定义,自动提取学校信息 4. **结果整理**:按中文字段整理输出,生成结构化数据 ## 文件说明 - `crawler_optimized.py` - 优化版爬虫(推荐使用) - `crawl_results.json` - 详细爬取结果(包含所有页面的提取信息) - `school_info.json` - 聚合后的学校信息(按中文字段整理) ## 使用方法 ### 运行爬虫 ```bash python crawler_optimized.py ``` ### 配置参数 在 `crawler_optimized.py` 的 `main()` 函数中可以修改: ```python START_URL = 'https://www.ucas.ac.cn/' # 起始网站 MAX_WORKERS = 3 # 线程数 MAX_PAGES = 50 # 最大爬取页面数 ``` ## 提取的字段 根据School_ontology.xlsx定义,系统提取以下字段: | 中文字段 | 说明 | |---------|------| | 学校名称 | 学校的正式名称 | | 学校简称 | 学校的简称或英文缩写 | | 学校类型 | 如:985、211、双一流 | | 所在省份 | 学校所在省份 | | 所在城市 | 学校所在城市 | | 详细地址 | 学校详细地址 | | 官方网站 | 学校官方网站URL | | 联系电话 | 学校联系电话 | | 联系邮箱 | 学校联系邮箱 | | 学校简介 | 学校简介信息 | | 成立时间 | 学校成立时间 | ## 爬取结果示例 ### 中国科学院大学信息 ```json { "学校名称": "中国科学院大学", "学校简称": "UCAS", "学校类型": "双一流", "所在省份": "北京市", "所在城市": "北京市", "详细地址": "北京市怀柔区雁栖湖东路1号", "官方网站": "https://www.ucas.ac.cn/", "联系电话": "010-69671108" } ``` ## 技术特点 ### 1. 多线程并发 - 使用 `ThreadPoolExecutor` 实现多线程爬取 - 线程安全的URL队列和结果存储 - 可配置并发线程数 ### 2. 智能字段提取 - **表格解析**:自动识别HTML表格中的字段-值对 - **正则匹配**:使用正则表达式提取特定格式的信息 - **语义识别**:根据关键词匹配字段内容 - **特殊处理**:针对电话、邮箱、地址等字段的专门提取逻辑 ### 3. 数据清洗 - 去除HTML标签和噪音 - 文本长度限制,避免提取过长内容 - 去重和聚合,选择最优值 ### 4. 结果整理 - 按中文字段名整理输出 - 生成JSON格式的结构化数据 - 提供详细和聚合两种结果 ## 实现细节 ### URL管理 - 使用队列管理待爬取URL - 维护已访问URL集合,避免重复爬取 - 限制爬取范围在同一域名下 ### 字段提取策略 1. 从页面标题推断学校名称 2. 在表格中查找字段-值对 3. 使用正则表达式匹配特定模式 4. 针对电话、邮箱等使用专门的提取函数 ### 数据聚合 - 收集所有页面的字段值 - 去重并选择最合适的值(通常是最短的) - 生成最终的学校信息 ## 扩展性 系统设计具有良好的扩展性: 1. **添加新字段**:在 `target_fields` 字典中添加字段定义 2. **自定义提取逻辑**:在 `extract_field_info()` 方法中添加提取规则 3. **更换目标网站**:修改 `START_URL` 即可爬取其他学校网站 ## 注意事项 1. 爬取速度受网络状况影响 2. 部分字段可能无法从网页中提取(如学校简介、成立时间等需要访问特定页面) 3. 建议设置合理的延迟,避免对目标网站造成压力 4. 遵守网站的robots.txt规则 ## 依赖 仅使用Python标准库: - `urllib` - HTTP请求 - `html.parser` - HTML解析 - `concurrent.futures` - 多线程 - `json` - JSON处理 - `re` - 正则表达式 无需安装第三方库,开箱即用。