Skip to main content
Glama

Scrapy MCP Server

by ThreeFish-AI
CHANGELOG.md44.5 kB
# Changelog All notable changes to the Data Extractor project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v0.1.5 #### Released on 2025/09/17 **版本亮点**: 本版本是一个里程碑式的重大更新,实现了 MCP 工具的全面标准化重构和 API 文档完善,建立了完整的 FastMCP 规范体系,同时通过综合测试系统全面优化,从基础测试扩展至企业级测试体系,显著提升了工具的易用性、文档质量和系统稳定性。 ### 新增 - **MCP 工具 API 文档全面完善** - **返回值规范体系建立**: 新增完整的 FastMCP 返回值规范说明章节 - 建立通用字段说明,明确 `success`、`error`、时间戳等标准字段含义 - 提供 6 种主要响应模型类型对照表,涵盖所有工具返回值类型 - 添加强类型 Pydantic BaseModel 标准说明 - **详细返回值文档**: 为核心 MCP 工具补充完整的返回值字段表格 - `scrape_webpage` 工具: 添加 `ScrapeResponse` 完整字段说明和示例 - `scrape_multiple_webpages` 工具: 添加 `BatchScrapeResponse` 批量操作结构说明 - `extract_links` 工具: 添加 `LinksResponse` 链接提取详细字段文档 - `get_server_metrics` 工具: 添加 `MetricsResponse` 性能指标完整结构 - `clear_cache` 工具: 添加 `CacheOperationResponse` 缓存操作结果说明 - **API 文档标准化**: 统一工具文档格式,提供参数说明、返回值类型、字段表格和示例 - **综合测试系统全面优化** - **新增 5 个单元测试文件**: 完整覆盖所有核心模块和组件 - `tests/unit/test_server_mcp_tools.py` - 14 个 MCP 工具完整单元测试覆盖 - `tests/unit/test_config.py` - 配置管理模块全面测试验证 - `tests/unit/test_markdown_converter.py` - Markdown 转换器功能完整测试 - `tests/unit/test_pdf_processor.py` - PDF 处理器功能全面测试 - `tests/unit/test_advanced_features.py` - 高级功能模块综合测试 - **新增 2 个集成测试文件**: 现代化端到端测试覆盖 - `tests/integration/test_updated_mcp_tools.py` - 更新的 MCP 工具集成测试 - `tests/integration/test_updated_comprehensive_integration.py` - 综合集成测试套件 - **新增 TESTING.md 文档**: 67KB 综合测试指导文档 - 快速开始指南和测试架构说明 - 详细运行指南和故障排除手册 - 版本对比功能和性能基准说明 - **新增测试运行脚本**: `scripts/run-tests.sh` 多模式测试执行 - 6 种运行模式:单元、集成、完整、快速、性能、清理 - 彩色输出、依赖检查和自动报告生成 - **图片嵌入功能扩展** - **MarkdownConverter 图片嵌入引擎**: 新增 `_embed_images_in_markdown()` 方法 - 支持将网页中的远程图片以 data URI 形式嵌入到 Markdown 文档中 - 智能图片大小检测:通过 Content-Length 头部预检查,避免下载超大图片 - 多格式支持:自动识别 PNG、JPEG、GIF、WebP 等常见图片格式 - 失败回退机制:下载失败或超限时保留原始图片链接 - 详细统计信息:提供嵌入成功数、跳过数、错误数等诊断数据 - **MCP 工具集成图片嵌入功能** - `convert_webpage_to_markdown`: 新增 `embed_images` 和 `embed_options` 参数支持 - `batch_convert_webpages_to_markdown`: 批量转换工具同步支持图片嵌入功能 - 配置化嵌入选项: - `max_images`: 最大嵌入图片数量限制(默认 50) - `max_bytes_per_image`: 单张图片大小上限(默认 2MB) - `timeout_seconds`: 图片下载超时控制(默认 10 秒) - **图片嵌入测试体系**: 新增 TestImageEmbedding 测试类 - 成功嵌入小图片测试:验证 base64 编码和 data URI 生成 - 大图片跳过测试:验证通过 Content-Length 头部检测超限图片 - 下载失败处理测试:验证网络错误时的回退机制 - 超时处理测试:验证请求超时时的异常处理 - 统计数据验证:测试嵌入统计信息的准确性和完整性 ### 变更 - **MCP 工具参数架构重构与标准化** - **参数定义模式升级**: 全面重构 14 个 MCP 工具参数定义 - 从 BaseModel 子类迁移到 `Annotated[*, Field(...)]` 参数约束模式 - 统一使用 FastMCP 标准的函数签名定义方式 - 提供更清晰的参数描述和示例说明 - **参数描述格式优化**: 系统性改进参数文档质量 - 优化多行文档字符串格式,移除冗余的项目符号 - 统一参数描述风格,提供中文友好的说明文本 - 清理参数文档中的重复 Args 部分描述 - **类型注解完善**: 确保所有工具函数具有完整的返回值类型注解 - 14 个工具函数全部添加明确的返回值类型 (如 `-> ScrapeResponse`) - 保持与 Pydantic 响应模型的完全一致性 - **测试系统适配**: 更新测试用例以适配新的参数定义方式 - 修复参数 schema 访问方式,适配新的函数签名结构 - 确保所有 MCP 工具测试正常运行 - **pyproject.toml 测试配置全面升级** - **pytest 配置优化**: 新增测试路径、标记系统、asyncio 支持 - **覆盖率配置完善**: HTML、XML、JSON 多格式报告生成 - **测试标记系统**: slow、integration、unit、requires_network 等标记 - **开发依赖更新**: 新增 pytest-html、pytest-json-report、pytest-mock 等 - **测试基础设施现代化** - **从基础测试到企业级测试系统**: 330 个测试用例全覆盖 - **多种报告格式支持**: HTML 可视化、XML CI/CD 集成、JSON 版本对比 - **并行测试执行**: pytest-xdist 支持加速测试运行 - **自动化测试流程**: 依赖检查、清理、执行、报告一体化 - **MCP 工具参数说明系统性优化** - **全面升级 14 个 MCP 工具参数文档**: 对所有 `@app.tool()` 装饰器标记的 MCP 工具参数提供详细说明 - **核心工具优化完成**: - `scrape_webpage` - 单页面抓取工具参数增强 - `scrape_multiple_webpages` - 批量页面抓取工具参数完善 - `extract_links` - 链接提取工具参数详细化 - `get_page_info` - 页面信息获取工具参数说明 - `check_robots_txt` - robots.txt 检查工具参数优化 - `scrape_with_stealth` - 反检测抓取工具参数增强 - `fill_and_submit_form` - 表单自动化工具参数完善 - `get_server_metrics` - 服务器指标工具参数说明 - `clear_cache` - 缓存清理工具参数优化 - `extract_structured_data` - 结构化数据提取工具参数详细化 - `convert_webpage_to_markdown` - 网页转 Markdown 工具参数增强 - `batch_convert_webpages_to_markdown` - 批量网页转 Markdown 工具参数完善 - `convert_pdf_to_markdown` - PDF 转 Markdown 工具参数详细化 - `batch_convert_pdfs_to_markdown` - 批量 PDF 转 Markdown 工具参数优化 - **参数说明特点**: - **中文友好**: 所有参数使用详细中文描述,提升易用性 - **类型标注**: 明确标注参数类型 (str, List[str], Dict, bool) 和默认值 - **选项枚举**: 详细列举方法选择 (auto/simple/scrapy/selenium) 和格式选项 (markdown/text) - **实际示例**: 提供具体 JSON 配置示例和使用场景说明 - **高级功能**: 详细说明图片嵌入、格式化选项、页面范围等高级参数 - **返回值说明**: 明确说明返回数据结构和错误处理格式 - **文档同步更新**: - **extractor/server.py**: 所有工具函数和 Pydantic 请求模型参数文档字符串优化 - **README.md**: MCP 工具参数说明章节同步更新 - **tests/TESTING.md**: 测试文档的参数说明章节同步完善 - **文档体系更新** - **README.md**: 新增图片嵌入功能文档 - 详细的 `embed_images` 和 `embed_options` 参数说明 - 完整的 JSON 配置示例,展示图片嵌入参数使用方法 - 图片嵌入限制和最佳实践说明 - **TESTING.md**: 更新测试覆盖范围 - 新增图片嵌入功能测试类别描述 - 测试用例数量统计更新 - **TEST_RESULTS.md**: 测试结果报告更新 - 反映新增图片嵌入测试的执行结果 - 测试通过率和覆盖范围统计更新 ### 修复 - **测试系统响应对象属性访问错误全面修复** - **核心问题解决**: 修复了 19 个失败测试中的所有响应对象属性访问错误,成功将失败测试数量减少到 14 个 - **ScrapeResponse 属性访问修复**: 修复 `content` 和 `title` 属性访问错误 - 将错误的直接属性访问改为正确的 `data["content"]` 和 `data["title"]` 访问方式 - 修复多个集成测试文件中的 ScrapeResponse 对象访问模式 - **BatchPDFResponse 属性名称统一**: 修复属性名称不匹配问题 - `successful` → `successful_count` 属性名修正 - `total_words_extracted` → `total_word_count` 属性名修正 - `summary` 字典访问改为直接访问各个属性字段 - `failed` → `failed_count` 属性名修正 - **PDFResponse 属性访问标准化**: 修复多个属性访问错误 - `markdown` → `content` 属性名修正 - `source` → `pdf_source` 属性名修正 - `pages_processed` → `page_count` 属性名修正 - `text` → `content` 属性名修正 - **MetricsResponse 对象访问优化**: 修复错误的字典式访问 - 移除错误的 `metrics` 字典访问,改为直接访问各个指标属性 - 修复 `successful_count_requests` 等不存在属性的访问错误 - **MCP 工具参数断言修复**: 修复参数 schema 访问错误 - 修复直接访问 `properties` 的错误方式 - 改为通过 `$defs` 访问嵌套 schema 定义的正确方式 - 统一所有 MCP 工具的参数验证逻辑 - **Pydantic 对象字典式访问修复**: 修复对象访问模式错误 - 修复 `result.get("success")` 等字典式访问错误 - 改为正确的 `result.success` 属性访问方式 - 修复 `r.get("word_count", 0)` 等错误访问,改为 `r.word_count` - **Markdown 段落格式保持优化 - 超强算法升级** - **问题大幅改善**: 修复页面转 Markdown 工具输出格式问题,实现超强智能段落分割 - **核心技术升级**: - **超强智能分段**: 升级 `_split_text_into_paragraphs()` 方法,实现 5 层分割策略 - **多策略段落检测**: 双换行符、句号+大写字母、语义模式、过渡词检测等 - **新增强制分割**: `_force_split_long_paragraph()` 方法处理极难分割的长段落 - **超激进分割策略**: 长度阈值从 250→150→120→90 字符,解决多句合并问题 - **过渡词智能扩展**: 从 15 个扩展到 25+个常见过渡词,改善主题切换识别 - **多种分割模式**: 支持句子、逗号、分号、冒号、词边界等 5 种强制分割策略 - **卓越效果验证**: - **真实测试**: 使用 https://blog.langchain.com/context-engineering-for-agents/ 验证 - **效果对比**: 从 16390 字符 1 行 → 16464 字符 149 行 74 段落 - **长行优化**: 200 字符以上长行从初始值降至 28 行,大幅改善可读性 - **多句优化**: 多句合并行从初始值降至 42 行,明显改善段落结构 - **分隔完善**: 74 个空行提供良好段落间分隔,提升阅读体验 - **全面测试**: 所有单元测试通过,确保功能稳定性和兼容性 - **集成测试方法引用路径修复** - **Mock 路径纠正**: 修复`extractor.scraper.WebScraper`到`extractor.server`的方法引用 - **依赖缺失处理**: 为 psutil 缺失情况添加优雅跳过处理 - **配置文件重复修复**: 移除 pyproject.toml 中重复的 pytest 配置段 - **包发现错误修复**: 配置 setuptools 正确排除 tests、reports、htmlcov、scripts 目录 - **配置测试一致性修复** - **配置默认值统一**: 修复 `extractor/config.py` 中 `server_name` 默认值与测试期望不一致问题 - 将 `DataExtractorSettings.server_name` 默认值从 `"Data Extractor"` 修正为 `"data-extractor"` - 同步更新 `tests/unit/test_config.py` 中相关测试期望值保持一致性 - **测试稳定性提升**: 完全消除配置测试失败,测试通过率从 327/330 提升至 328/330 - 修复 `test_default_settings` 测试中的 AssertionError 断言错误 - 修复 `test_missing_environment_variables` 测试中的配置期望值不匹配问题 - **配置系统完善**: 确保所有配置测试在清空环境变量后使用正确的默认值 - 统一 server_name 在配置类和测试中的命名规范 - 保证配置的向后兼容性和系统稳定性 - **测试稳定性显著提升** - **错误类型完全消除**: 彻底解决所有 AttributeError 和 TypeError 关于响应对象属性的错误 - **测试结果改善**: 失败测试从 19 个减少到 14 个,剩余错误均为业务逻辑问题而非属性访问错误 - **代码质量提升**: 统一了响应对象访问模式,提高了测试代码的可维护性 ### 整理 - **项目文档结构优化** - **里程碑文档更新**: 完善项目开发进度记录和版本管理文档 - **代码规范统一**: 整理项目编码标准和最佳实践指南 - **文档格式标准化**: 统一 README.md、TESTING.md 等文档的格式规范 - **测试文件结构优化** - **移动集成测试**: 将 `test_langchain_blog.py` 移动到 `tests/integration/test_langchain_blog_conversion.py` - **修复异步测试问题**: 添加 `@pytest.mark.asyncio` 装饰器,解决 "async def functions are not natively supported" 错误 - **改善测试结构**: 重命名测试函数为 `test_langchain_blog_conversion()`,提升测试可读性 - **优化文件处理**: 使用临时文件替代工作目录文件创建,避免测试污染 - **新增独立脚本**: 创建 `scripts/test_langchain_blog.py` 提供手动测试功能 - **清理测试环境**: 移除测试目录下的遗留 Markdown 输出文件 - **测试验证**: 221 个测试全部通过,确保无回归问题 ### 技术改进 - **FastMCP 标准合规性**: 全面遵循 FastMCP 2.0 标准,确保工具的兼容性和可维护性 - **类型安全增强**: 通过 Pydantic BaseModel 和完整类型注解提升代码安全性 - **API 设计优化**: 标准化工具接口设计,提升开发者体验和集成便利性 ### 技术细节 - **超强段落分割算法实现**: - `_split_text_into_paragraphs()`: 主分割逻辑,包含 4 个分割策略 - `_split_long_text()`: 处理超长文本分块(最大 150 字符,从 250 字符优化) - `_split_by_semantic_patterns()`: 基于语义模式的主题转换检测 - `_split_by_sentences()`: 句子边界检测与智能分组(阈值 90 字符,从 150 字符优化) - `_force_split_long_paragraph()`: 强制分割极长段落,支持 5 种策略(句子、逗号、冒号、分号、词边界) - **优化分割阈值**: - 主要长度限制从 250→180→150 字符 - 句子分组从 150→120→100→90 字符 - 强制分割从 200→180→150 字符,更激进的处理策略 - **扩展过渡词检测**: 新增"Each", "Every", "Any", "Other"等高频过渡词 - **增强主题识别**: 支持"LangGraph", "Claude Code", "ChatGPT"等专有名词主题切换检测 ## v0.1.4 #### Released on 2025/09/06 版本管理统一化重构:实现基于 pyproject.toml 的单一版本源管理,消除版本号分散问题。通过动态版本读取机制,确保项目所有位置版本号自动同步,简化版本更新流程。测试系统全面修复:解决了 27 个集成测试失败问题,修复了 PDF 处理器相关的导入错误和模块属性访问错误。强化集成测试体系:从 37 项扩展至 93 项(增长 151%),新增 PDF 工具实际执行验证、跨工具协作流程测试、端到端现实场景测试,项目总测试数量达到 219 个,通过率从 88% 提升至 98.6%。完整的 GitHub Actions CI/CD 自动化体系建设:实现跨平台测试、自动发布、依赖管理等全流程自动化。 ### 新增 - **版本管理统一化系统** - **动态版本读取机制**: 实现从 pyproject.toml 统一读取版本号的核心功能 - extractor/**init**.py: `_get_version_from_pyproject()` 函数,支持自动版本发现和备用机制 - extractor/config.py: `_get_dynamic_version()` 函数,配置系统集成动态版本读取 - 版本读取优先级:环境变量 > 动态读取 > 备用版本的三级回退机制 - 项目根目录自动发现和路径解析,支持多层级项目结构 - **统一版本源架构**: pyproject.toml 作为唯一版本定义位置 - 消除版本号分散在多个文件的问题(**init**.py, config.py, .env.example 等) - 自动同步机制确保所有位置版本号实时一致 - 支持环境变量覆盖,适配不同部署环境需求 - **版本管理工具集** - scripts/update_version.py: 版本号批量更新脚本,支持文档和配置文件同步更新 - VERSION_MANAGEMENT.md: 完整版本管理使用文档和最佳实践指南 - 自动化验证测试,确保版本管理系统稳定可靠 - **集成测试强化套件** - **test_pdf_integration.py**: PDF 工具深度集成测试(13 项测试) - PDF 工具实际执行验证:通过 MCP 接口直接调用 PDF 转换工具 - 双引擎切换测试:验证 PyMuPDF 和 PyPDF2 引擎自动选择和故障转移 - 参数传递完整性:测试 URL、页面范围、输出格式等参数正确传递 - 错误处理和恢复:测试 PDF 下载失败、解析错误等异常情况处理 - 并发执行验证:验证多个 PDF 并发处理时的资源管理和结果正确性 - **test_cross_tool_integration.py**: 跨工具协作集成测试(9 项测试) - 网页 →PDF→Markdown 工作流:测试完整数据处理流水线 - 批量处理组合:验证多种工具的批量处理能力和数据流完整性 - 工具间参数传递:测试工具间配置和参数的正确传递 - 跨工具错误传播:验证一个工具失败对整个工作流的影响和恢复能力 - 指标收集集成:测试跨工具使用时的性能指标收集和汇总 - **test_end_to_end_integration.py**: 端到端现实场景测试(34 项测试) - 完整文档处理管道:技术文档门户、学术论文研究、新闻聚合、企业知识库构建流程 - 错误恢复和韧性测试:网络中断恢复、部分失败场景处理、超时和重试机制验证 - 性能和可扩展性基准测试:并发处理性能基准、大量数据批处理、内存使用监控 - 数据完整性和一致性验证:跨工具数据一致性检查、编码格式完整性、并发安全性验证 - **PDF 转 Markdown 工具集** - **convert_pdf_to_markdown**: 单 PDF 文档转 Markdown 工具 - 支持 URL 和本地文件路径输入 - 双引擎支持:PyMuPDF (fitz) 和 pypdf,自动选择最佳方案 - 智能回退机制:PyMuPDF 失败时自动切换到 pypdf - 页面范围选择:支持部分页面提取(page_range 参数) - 元数据提取:包含作者、标题、创建日期、页数、文件大小等完整信息 - 自动文本转 Markdown 格式化:标题识别、章节分割、格式优化 - **batch_convert_pdfs_to_markdown**: 批量 PDF 转 Markdown 工具 - 并发处理多个 PDF 文件,提升批量转换效率 - 详细统计摘要:总数、成功数、失败数、总页数、总字数等 - 错误隔离:单个 PDF 失败不影响其他文件处理 - 统一配置:所有 PDF 使用相同的处理参数确保一致性 - **PDFProcessor 核心处理引擎** - extractor/pdf_processor.py: 新增专用 PDF 处理模块(418 行代码) - 异步下载支持:URL 自动下载到临时文件,处理后自动清理 - 方法选择逻辑:auto(智能选择)、pymupdf(高性能)、pypdf(兼容性) - 文本提取优化:页面标记、空内容过滤、编码处理 - 元数据标准化:统一 PyMuPDF 和 pypdf 的元数据格式 - 临时文件管理:自动创建临时目录,处理完成后自动清理 - **GitHub Actions CI/CD 自动化体系** - **.github/workflows/ci.yml**: 持续集成工作流 - 跨平台测试支持:Ubuntu、Windows、macOS 三大操作系统 - 多 Python 版本兼容性测试:Python 3.12、3.13 版本覆盖 - 代码质量检查:ruff 代码风格检查、mypy 类型检查、bandit 安全扫描 - 测试覆盖率报告:自动生成覆盖率报告并上传到 Codecov - 构建验证:确保包构建和安装过程正确无误 - **.github/workflows/release.yml**: 自动发布工作流 - Git 标签触发:监听 `v*.*.*` 格式标签自动创建发布 - 变更日志提取:自动从 CHANGELOG.md 提取对应版本的发布说明 - GitHub 发布创建:自动创建 GitHub Release 并附加发布说明 - PyPI 发布:通过 OIDC 信任发布机制安全发布到 PyPI - **.github/workflows/publish.yml**: 综合发布工作流 - 双阶段发布:TestPyPI 预发布验证 → PyPI 正式发布 - 完整测试验证:发布前执行全套测试确保质量 - 包验证检查:使用 twine 验证包结构和元数据正确性 - 变更日志维护:发布后自动更新 CHANGELOG.md - **.github/workflows/dependencies.yml**: 依赖管理自动化 - 定时依赖更新:每周一自动检查依赖更新 - 安全审计:依赖安全漏洞扫描和报告 - 自动 PR 创建:依赖更新自动创建拉取请求供审核 - **.github/workflows/README.md**: 工作流文档 - 完整的工作流使用指南和配置说明 - PyPI 信任发布配置步骤和最佳实践 - 故障排除指南和常见问题解决方案 ### 变更 - **版本管理系统重构** - **extractor/**init**.py**: 版本读取机制完全重构 - 硬编码版本号 `__version__ = "0.1.3"` 替换为动态读取 `__version__ = _get_version_from_pyproject()` - 新增 `_get_version_from_pyproject()` 函数实现智能版本解析 - 项目根目录路径自动发现:`current_file.parent.parent` 定位机制 - 异常安全处理和备用版本机制,确保在任何情况下都有可用版本号 - **extractor/config.py**: 配置系统版本管理重构 - `server_version` 字段从硬编码默认值改为 `Field(default_factory=_get_dynamic_version)` - 新增动态版本设置逻辑:环境变量检测和自动配置更新机制 - 智能实例重新创建:版本不匹配时自动更新 settings 实例 - 版本设置标记系统:`_version_set` 属性防止重复处理 - **.env.example**: 版本配置说明优化 - `DATA_EXTRACTOR_SERVER_VERSION=0.1.3` 更改为注释说明 - 新增版本自动读取机制说明:`# 版本号自动从 pyproject.toml 读取,无需手动配置` - 简化配置流程,减少用户手动维护版本号的负担 - **测试稳定性提升** - **测试通过率**: 从 88% (189/216 通过) 提升至 98.6% (216/219 通过) - **失败测试清零**: 解决了所有 27 个失败的集成测试,错误类型包括: - 10 个 NameError: name 'pdf_processor' is not defined 错误 - 15 个 AttributeError: module 'extractor.pdf_processor' has no attribute 错误 - 2 个测试断言失败错误 - **测试执行时间优化**: 完整测试套件执行时间稳定在 48 秒左右 - **警告信息处理**: 保留必要的 PyMuPDF SWIG 模块警告,过滤不影响功能的提示信息 - **项目结构文档更新** - **README.md**: 项目结构和测试统计全面更新 - 测试体系描述:从 "162 个测试" 更新为 "219 个测试" - 集成测试详情:从 31 项扩展到 93 项,增加三个新测试文件描述 - 测试类型重组:从 6 类扩展为 8 类,新增 PDF 工具实际调用、跨工具协作、端到端现实场景测试 - 里程碑成就更新:添加 "集成测试强化" 里程碑说明 - 当前状态更新:测试覆盖率更新为 "98.6%+ (强化集成测试覆盖)" - **TESTING.md**: 测试文档体系完善 - 新增三个集成测试套件详细描述和测试覆盖范围说明 - 测试质量提升成果统计:测试覆盖率提升 151%,通过率 98.6% - 强化测试方法和场景覆盖说明 - **依赖管理更新** - **pyproject.toml**: 新增 PDF 处理依赖 - `PyMuPDF>=1.21.0`: 高性能 PDF 文本提取引擎 - `pypdf>=3.0.0`: 兼容性 PDF 处理库(从 PyPDF2 升级) - 确保测试依赖 `pytest>=8.0.0` 和 `pytest-asyncio>=0.23.0` 配置正确 ### 修复 - **版本管理系统优化** - **代码质量问题修复** - extractor/**init**.py: 移除未使用的 `os` 导入,修复 Ruff 和 Pylance 诊断警告 - extractor/config.py: 移除未使用的 `os` 导入,优化动态版本读取函数导入结构 - scripts/update_version.py: 移除未使用的 `re` 导入,完善文件更新逻辑 - 修复 Pydantic 设置实例属性赋值问题:使用 `setattr()` 替代直接属性赋值 - **版本读取机制完善** - 修复版本读取缓存问题:通过环境变量注入和实例重新创建确保版本同步 - 完善异常处理:确保版本读取失败时有合适的备用机制 - 优化路径解析:统一使用 `Path(__file__).resolve()` 确保路径解析准确性 - **构建系统现代化** - **pyproject.toml 许可证配置更新** - 修复 `uv build` 构建警告:将过时的 `"License :: OSI Approved :: MIT License"` 分类器移除 - 采用现代 SPDX 许可证表达式:`license = "MIT"` 替代传统分类器方式 - 消除 setuptools 废弃警告,确保构建过程无警告输出 - **测试系统全面修复** - **PDF 处理器导入错误修复**: 修复集成测试中 pdf_processor 未定义的 NameError - tests/integration/test_cross_tool_integration.py: 更新导入方式,使用 \_get_pdf_processor 替代直接导入 - tests/integration/test_end_to_end_integration.py: 修复 PDF 处理器 fixture 引用问题 - tests/integration/test_mcp_tools.py: 更新 PDF 处理器资源清理测试的导入方式 - 所有集成测试文件统一使用延迟加载的 PDF 处理器实例 - **PDF 模块属性访问错误修复**: 解决 fitz 和 pypdf 模块属性不存在的 AttributeError - tests/unit/test_pdf_processor.py: 将 extractor.pdf_processor.fitz 改为 \_import_fitz 延迟导入模式 - tests/unit/test_pdf_processor.py: 将 extractor.pdf_processor.pypdf 改为 \_import_pypdf 延迟导入模式 - tests/integration/test_pdf_integration.py: 修复 PDF 库 mock 调用,统一使用延迟导入函数 - 所有测试文件统一 mock 模式,确保与实际代码的延迟导入机制一致 - **测试 Mock 机制重构**: 统一 PDF 处理器测试的 mock 模式 - 修复 test_pdf_batch_integration_with_file_mix 测试中的 mock 配置错误 - 确保所有 PDF 相关测试正确使用 \_get_pdf_processor() 函数获取处理器实例 - 统一延迟导入库的 mock 调用模式,避免直接访问未加载的模块属性 - **代码质量问题解决** - 修复 `test_cross_tool_integration.py` 中缺失的 `unittest.mock.patch` 导入 - 移除未使用变量 `markdown_result`,使用 `_` 占位符避免 Ruff 警告 - 修复 `test_end_to_end_integration.py` 中 11 个 f-string 格式问题 - 解决所有 Pylance 和 Ruff 诊断问题,提升代码规范性 ## v0.1.3 #### Released on 2025/09/06 重大功能更新:为「页面转 Markdown 文档」功能新增高级格式化能力,提供 8 种可配置的格式化选项,包括表格对齐、代码语言检测、智能排版等功能,显著提升 Markdown 转换质量。强化测试体系,新增综合集成测试和系统诊断功能,测试用例从 19 个基础测试扩展至 162 个,测试通过率达到 99.4%,项目质量评级 A+,已达生产就绪标准。 ### 新增 - **Markdown 转换工具集** - **convert_webpage_to_markdown**: 单页面转 Markdown 工具,支持智能内容提取和元数据处理 - 自动识别并提取网页主要内容区域(main、article、.content 等选择器) - HTML 预处理:移除注释、清理无关标签、转换相对 URL 为绝对 URL - Markdown 格式优化:清理多余空白行、优化列表格式、移除行尾空格 - 元数据丰富:包含标题、描述、字数统计、链接数量、图片数量、域名等信息 - 自定义转换选项:支持标题样式、列表符号、链接格式等自定义配置 - **batch_convert_webpages_to_markdown**: 批量页面转 Markdown 工具,支持并发处理多个 URL - 并发处理多个 URL,提升批量转换效率 - 详细统计信息:总数、成功数、失败数、成功率等汇总数据 - 错误隔离:单个页面失败不影响其他页面处理 - 配置一致性:所有页面使用相同的转换配置保证格式统一 - **MarkdownConverter 核心转换引擎** - extractor/markdown_converter.py: 新增专用 Markdown 转换模块 - 基于 markdownify 库的 HTML 到 Markdown 转换 - 智能内容区域提取算法,支持最小内容长度检查(200 字符阈值) - HTML 预处理流水线:注释移除、标签清理、URL 转换、空元素清理 - Markdown 后处理优化:空行清理、列表格式化、内容修剪 - **高级 Markdown 格式化功能** - **8 种可配置格式化选项**,支持选择性启用/禁用 - format_tables: 表格自动对齐和格式标准化 - detect_code_language: 代码块语言自动检测(支持 JavaScript、Python、HTML、SQL、JSON 等 10+ 语言) - format_quotes: 引用块格式优化和间距统一 - enhance_images: 图片 alt 文本自动生成和增强(从文件名提取友好描述) - optimize_links: 链接格式优化和跨行修复 - format_lists: 列表标记统一化和间距规范 - format_headings: 标题层级和间距自动优化 - apply_typography: 智能排版增强(智能引号、em 破折号、空格清理) - **配置化设计**: formatting_options 参数支持,默认全部启用,支持运行时动态配置 - **格式化方法实现**: 8 个专用格式化方法 (\_format_tables, \_format_code_blocks 等) - **MCP 工具集成**: convert_webpage_to_markdown 和 batch_convert_webpages_to_markdown 均支持 formatting_options 参数 - **综合集成测试体系** - tests/integration/test_comprehensive_integration.py: 11 个高级集成测试用例 - TestComprehensiveIntegration: 端到端 Markdown 转换流程测试、配置动态应用验证 - TestPerformanceAndLoad: 并发性能测试(20 个 URL 同时处理)、大内容处理、内存使用监控 - TestErrorResilienceAndRecovery: 网络错误恢复、部分失败处理、异常场景覆盖 - TestRealWorldScenarios: 新闻文章转换、技术博客处理、电商页面测试 - TestSystemHealthAndDiagnostics: 系统健康诊断、组件初始化验证、工具参数模式完整性 - TestMemoryAndResourceManagement: 内存泄漏检测、垃圾回收验证、资源清理测试 - **完整测试覆盖体系** - tests/unit/test_markdown_converter.py: MarkdownConverter 单元测试(58 个测试用例) - 原有功能测试(33 个):初始化和配置测试、HTML 预处理测试、转换功能测试、后处理测试、内容提取测试、批量转换测试 - **高级格式化功能测试(25 个新增)**: TestAdvancedFormattingFeatures 测试类 - 表格格式化测试:基础格式化、对齐识别、分隔符优化 - 代码块增强测试:语言自动检测、格式标准化 - 引用块、图片描述、链接格式、列表格式、标题优化测试 - 排版增强测试:智能引号、破折号转换、空格清理 - 配置管理测试:选择性启用/禁用、配置传递、默认行为 - 集成测试:单页转换、批量转换、错误处理 - tests/integration/test_mcp_tools.py: 增强 MCP 工具集成测试(31 个测试用例) - 原有 12 个 MCP 工具注册验证、参数模式检查 - 新增 TestMarkdownConversionToolIntegration 测试类 - Markdown 转换工具结构验证、MarkdownConverter 组件集成测试 - 高级格式化选项集成测试、错误处理集成验证、配置管理测试 - 新增 TestSystemHealthAndDiagnostics 系统诊断测试类 - 全组件初始化测试、工具参数模式完整性检查、系统负载韧性测试 - 内存和资源管理测试、并发访问稳定性验证 ### 变更 - **文档体系全面重构** - **README.md**: 更新 MCP Server 工具列表和详细文档 - 工具表格更新:新增 convert_webpage_to_markdown 和 batch_convert_webpages_to_markdown - 新增工具详情章节:参数说明、功能特性、使用示例、返回格式 - 完整的 JSON 请求和响应示例,支持自定义转换选项 - **高级格式化功能文档**:新增 formatting_options 参数详细说明 - 8 种格式化选项完整描述和默认值说明 - 高级功能特性列表:表格对齐、代码检测、排版优化等 - 更新示例 JSON 配置,包含 formatting_options 使用示例 - 新增完整的测试运行指南和覆盖情况说明 - 测试覆盖情况表格:162 个测试用例详细分类统计 - 快速测试验证命令:安装、运行、分类测试的标准化指令 - 测试类型详细表格:6 大测试类别覆盖范围和测试数量说明 - 项目状态更新:测试覆盖率从 99%+ 更新为 99.4% (161/162 通过) - **TESTING.md**: 测试文档结构大幅扩展和内容补充 - 测试目录结构更新:新增 test_markdown_converter.py 和 test_comprehensive_integration.py 测试文件 - MCP 工具测试覆盖从 10 个扩展到 12 个工具 - 新增 Markdown 转换器测试章节:8 个主要测试类别详细说明 - **高级格式化功能测试文档**:新增第 8 个测试类别 TestAdvancedFormattingFeatures - 详细的格式化功能测试说明:表格、代码、引用、图片、链接、列表、标题、排版 - 配置管理和集成测试的完整测试策略 - 边界情况和性能测试的测试方法 - 综合集成测试详细说明:6 大测试类别的功能范围和验证重点 - 新增系统健康诊断测试:组件初始化、韧性测试、工具参数验证 - 测试覆盖范围表格更新:新增集成测试和综合测试覆盖说明 - **TEST_RESULTS.md**: 测试执行结果报告全面重构 - 测试概览:总测试数从 19 个扩展到 162 个,通过率 99.4% - 详细测试结果:按单元测试 (131 个) 和集成测试 (31 个) 分类统计 - 性能与质量验证:负载测试指标、内存管理验证、功能完整性验证 - 测试质量评估:A+ 评级,生产就绪状态确认 - **.prompts.md**: 项目进度里程碑更新 - 「页面转 Markdown 文档」功能标记为已完成 ✅ - 「Markdown 格式化功能」标记为已完成 ✅ - 「补全和强化集成测试」标记为已完成 ✅ - 新增「PDF 文档转 Markdown 文档,支持批处理」新里程碑 - **pyproject.toml**: 新增依赖 `markdownify>=1.2.0` 支持 HTML 到 Markdown 转换 ### 修复 - **MarkdownConverter 配置优化** - 修复 markdownify 配置冲突:移除 strip 和 convert 参数同时使用的错误 - 修复 wrap_width=0 导致的 "invalid width" 错误,改为 wrap=False 禁用换行 - 修复 BeautifulSoup 废弃方法:findAll → find_all,消除 DeprecationWarning - 优化内容提取测试断言:调整为更现实的内容长度和验证逻辑 - **高级格式化功能修复** - 修复标题格式化过度清理空行问题:调整 \_format_headings 方法保留必要的空白行 - 修复智能引号正则表达式语法错误:纠正引号替换的转义字符 - 修复 BeautifulSoup 类型检查问题:添加 hasattr 检查确保方法可用性 - 优化空行处理逻辑:确保基础清理与高级格式化的兼容性 - **集成测试稳定性优化** - tests/integration/test_mcp_tools.py: 优化工具描述验证逻辑 - 修复工具描述空值检查:仅在描述存在时验证长度要求 - 完善 JSON 模式生成异常处理:支持可调用模式的工具正常运行 - 优化测试断言逻辑:提高测试用例的健壮性和兼容性 ## v0.1.2 #### Released on 2025/09/06 ### 新增 - **完整测试框架体系** - tests/unit/: 单元测试目录,包含核心引擎和工具类测试 - tests/integration/: 集成测试目录,包含 10 个 MCP 工具端到端测试 - tests/fixtures/: 测试数据和固定装置目录 - tests/conftest.py: pytest 配置和共享 fixtures,支持异步测试 - **DataExtractor 核心引擎测试** - tests/unit/test_scraper_simple.py: WebScraper 基础功能测试(9 个测试用例) - tests/unit/test_scraper.py: HTML 解析和抓取引擎测试 - tests/unit/test_utils_basic.py: 工具类基础功能测试(10 个测试用例) - tests/unit/test_advanced_features.py: 反检测和表单处理功能测试 - **MCP 工具集成测试用例** - tests/integration/test_mcp_tools.py: 10 个核心 MCP 工具完整测试覆盖 - scrape_webpage, scrape_multiple_webpages, extract_links, get_page_info - check_robots_txt, scrape_with_stealth, fill_and_submit_form - get_server_metrics, clear_cache, extract_structured_data - **测试文档与报告** - TESTING.md: 67KB 详细测试文档,包含架构说明、运行指南、最佳实践 - TEST_RESULTS.md: 测试执行结果报告,19 个基础测试全部通过 ### 变更 - **pyproject.toml**: 确保测试依赖 `pytest>=8.0.0` 和 `pytest-asyncio>=0.23.0` 配置正确 - **scripts/setup.sh**: 代码格式化工具从 `black` 替换为 `ruff format`,提升格式化速度和一致性 ### 修复 - **单元测试异常修复(89/90 测试通过率 99%+)** - tests/integration/test_mcp_tools.py: 修复 MCP 工具调用接口错误,正确处理 FastMCP 框架 API - 修复 `get_tools()` 异步调用和字典格式解析 - 修复 `get_tool()` 返回的 FunctionTool 对象属性检查 - 完善 10 个 MCP 工具注册和执行验证测试 - tests/unit/test_utils.py: 修复工具类初始化参数不匹配问题 - RateLimiter: `requests_per_minute` → `requests_per_second` 参数修正 - CacheManager: 修复 `cache_dir` 参数移除,更新为内存缓存模式 - MetricsCollector: 修复方法名称错误(`get_metrics` → `get_stats`) - ErrorHandler: 修复静态方法调用和错误分类逻辑 - tests/unit/test_scraper.py: 修复抓取器属性名称和断言错误 - WebScraper 属性名修正:`scrapy_scraper` → `scrapy_wrapper` - 修复 URL 标准化断言错误(`https://example.com/` vs `https://example.com`) - 完善方法存在性检查和条件跳过逻辑 - tests/unit/test_advanced_features.py: 修复反检测和表单处理测试 Mock 配置 - AntiDetectionScraper: 修复 Playwright 异步初始化 Mock 设置 - FormHandler: 修复 Selenium/Playwright 检测逻辑和方法调用 Mock - 修复 "can't await Mock" 异步调用错误,采用分层 Mock 策略 - **类型检查完整性改进** - pyproject.toml: 新增 `types-requests>=2.32.4.20250809` 类型存根包依赖 - extractor/utils.py: 完善核心工具类型注解,修复 `Callable` 类型提示和异常处理逻辑 - extractor/scraper.py: 修复抓取引擎类型注解,添加 BeautifulSoup 属性安全检查 - extractor/advanced_features.py: 完善反检测和表单处理功能类型注解 - extractor/server.py: 修复 MCP 服务器验证器函数类型注解 - mypy.ini: 新增类型检查配置文件,支持第三方库类型忽略策略 ### 整理 - **测试架构标准化** - 建立单元测试与集成测试分离的标准结构 - 统一异步测试支持和 Mock 策略 - 优化测试执行性能和错误处理机制 ## v0.1.1 #### Released on 2025/09/05 ### 整理 - **包结构重构** - scrapy_mcp/ → extractor/: 完整包目录重命名,包含 6 个核心模块文件移动 - pyproject.toml: 项目名称 `scrapy-mcp` → `data-extractor`,入口命令更新 - pyproject.toml: 新增代码质量工具 `ruff>=0.12.12` 依赖 - uv.lock: 依赖锁定文件同步更新 - scripts/setup.sh: 安装脚本适配新包名 - **项目配置清理** - .mcp.json: 移除本地 `data-extractor` 服务器配置 - MIGRATION.md: 移除过时的迁移指南文档 ### 变更 - **配置系统标准化重构** - extractor/config.py: 配置类 `ScrapyMCPSettings` → `DataExtractorSettings` - extractor/config.py: 环境变量前缀统一 `SCRAPY_MCP_` → `DATA_EXTRACTOR_` - extractor/config.py: 配置属性简化,移除 `scrapy_` 前缀(如 `scrapy_concurrent_requests` → `concurrent_requests`) - extractor/utils.py: 文档字符串更新为 "Data Extractor MCP Server" - .env.example: 所有环境变量名称按新前缀规范更新 - README.md 和 CLAUDE.md: 配置示例和使用说明同步更新 - examples/basic_usage.py: 示例标题和描述文档更新 - **.mcp.json**: MCP 服务器配置切换到外部 GitHub 包源 `git+https://github.com/ThreeFish-AI/data-extractor.git@v0.1.1` - **CLAUDE.md**: 项目指导文档重构,新增架构概述和开发规范说明 - **README.md**: 文档更新以反映新包结构和使用方式 - **MIGRATION.md**: 迁移指南更新适配包重构 ### 新增 - **.prompts.md**: 提示词配置文件,支持 Claude Code 工作流程优化 ## v0.1.0 #### Released on 2025/08/26 ### 新增 - **Data Extractor 核心抓取引擎** - scrapy_mcp/scraper.py: 多策略抓取支持(Requests/BeautifulSoup、Scrapy、Selenium、Playwright) - scrapy_mcp/advanced_features.py: 反检测功能(Undetected Chrome、随机 UA、人类行为模拟) - scrapy_mcp/advanced_features.py: 表单交互自动化(输入/复选/下拉框识别与提交) - scrapy_mcp/utils.py: 企业级工具集(限流、指数退避重试、缓存、错误监控、性能指标) - scrapy_mcp/server.py: 高性能异步架构支持 - **MCP 工具集(10 个核心工具)** - `scrape_webpage`: 单页面抓取工具 - `scrape_multiple_webpages`: 批量页面抓取工具 - `scrape_with_stealth`: 反检测抓取工具 - `fill_and_submit_form`: 表单自动填写提交工具 - `extract_links`: 链接提取工具 - `extract_structured_data`: 结构化数据提取工具 - `get_page_info`: 页面信息获取工具 - `check_robots_txt`: robots.txt 检查工具 - `get_server_metrics`: 服务器性能指标工具 - `clear_cache`: 缓存清理工具 - **配置与扩展性支持** - scrapy*mcp/config.py: 环境变量配置系统(SCRAPY_MCP* 前缀) - 灵活的数据抽取配置系统,支持 CSS 选择器和属性提取 - 代理和 User-Agent 定制支持 - 完整的类型标注和日志记录 - **Python 3.12 兼容性问题** - 解决现代 Python 版本的依赖兼容性冲突 - 核心运行时依赖升级:aiohttp>=3.9.0, lxml>=5.0.0, requests>=2.32.0, selenium>=4.20.0 - 新增 playwright>=1.45.0, pydantic>=2.8.0, httpx>=0.27.0, twisted>=24.7.0 - **Pydantic v2 兼容性修复** - scrapy_mcp/config.py: 新增 `pydantic-settings` 依赖用于 `BaseSettings` - scrapy_mcp/config.py: 使用 `model_config` 替代旧版 `Config` 配置方式 - scrapy_mcp/config.py: 验证器从 `@validator` 迁移到 `@field_validator` - scrapy_mcp/config.py: 正确处理环境变量前缀映射 - **pyproject.toml**: 包管理使用 uv,Python 最低支持版本 Python 3.12+

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ThreeFish-AI/scrapy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server