用 C 通过 Xberg 从 URL 提取网页正文:ExtractAsync 与 UrlExtractionConfig 实战
发布时间:2026/9/28 19:40:59来源:尧图网络
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载本文以 Xberg 的 C# 绑定为例讲解如何基于XbergConverter.ExtractAsync直接传入一个 HTTP(S) URL让引擎自动抓取网页并返回可读正文Markdown/纯文本与结构化元数据。读完你可以掌握ExtractInput、UrlExtractionConfig、UrlExtractionMode三种模式auto/document/crawl的完整用法并理解底层 crawlberg 抓取引擎的工作方式与批量 URL 的共享执行机制。场景概述把抓网页当成提取文档在传统方案里抓取网页正文往往需要组合 HTTP 客户端、HTML 解析器与正文抽取逻辑。而 Xberg 把 URL 视为与本地文件、内存字节并列的一等输入类型只要在ExtractInput中把kind设为uri并传入 URL核心引擎就会自动完成下载、MIME 识别、HTML 转 Markdown、元数据抽取等整条流水线最终返回一个统一的ExtractedDocument结果。仓库中对应的端到端 fixture 位于 fixtures/url/url_html_page_extract.json其描述正是 extract: website URL returns page content网站 URL 返回页面内容。核心 API 速览围绕 URL 提取C# 绑定暴露了三个关键类型XbergConverter.ExtractAsync(...)统一的异步提取入口位于 packages/csharp/src/Xberg/XbergConverter.csExtractInput描述提取什么其中Kind Uri表示输入是一个 URI本地路径、file://URI 或 HTTP(S) URLExtractionConfig.UrlUrlExtractionConfig类型专门描述如何抓取/爬取这个 URL。对应的 Rust 核心类型定义在 crates/xberg/src/core/config/extraction/types.rs包括ExtractInput、ExtractInputKind、UrlExtractionMode、UrlExtractionConfig与ExtractionResult。完整示例提取单个网页正文关联文档给出的 C# 示例是这套 API 最精简的用法原文完整保留如下using System; using System.Text.Json; using Xberg; var ConfigOptions new JsonSerializerOptions { PropertyNameCaseInsensitive true }; var result await XbergConverter.ExtractAsync(new ExtractInput { Kind JsonSerializer.DeserializeExtractInputKind(\uri\, ConfigOptions)!, Uri https://example.com }, new ExtractionConfig { Url new UrlExtractionConfig { Mode JsonSerializer.DeserializeUrlExtractionMode(\document\, ConfigOptions)! } }); Console.WriteLine(result.Results[0].Content); Console.WriteLine(result.Results);这段代码做了三件事构造输入ExtractInput.Kind解析为枚举值uriUri字段指向https://example.com。这里通过JsonSerializer.Deserialize把字符串uri/document转换为枚举是因为绑定层以 JSON 序列化方式与 Rust 核心通信而核心侧枚举的 JSON 形式就是小写 snake_case 变体名。配置抓取模式在ExtractionConfig.Url中把Mode显式设为document告诉引擎把这个 URL 当作单个远程文档页面处理而不是当作爬虫种子。输出结果result.Results[0].Content是提取出的页面正文文本result.Results是完整的ExtractedDocument列表可 JSON 化包含元数据、标题、语言等信息。为了方便实际工程使用可以把枚举解析换成更直接、可读性更高的写法效果完全等价using System; using Xberg; var result await XbergConverter.ExtractAsync( new ExtractInput { Kind ExtractInputKind.Uri, Uri https://example.com }, new ExtractionConfig { Url new UrlExtractionConfig { Mode UrlExtractionMode.Document } }); Console.WriteLine(result.Results[0].Content);注意ExtractInputKind与UrlExtractionMode的枚举成员Auto/Document/Crawl在 UrlExtractionMode.cs 中通过[JsonPropertyName]显式标注了序列化名序列化到核心时会自动转为auto/document/crawl。UrlExtractionMode三种 URL 处理模式UrlExtractionMode决定引擎拿到 URL 之后采取哪种抓取策略定义于 crates/xberg/src/core/config/extraction/types.rs模式JSON 值行为对应引擎路径Auto默认auto抓取后自动分类 HTTP(S) 资源再决定如何提取batch_scrape分支Documentdocument把该 URI 当作单个远程文档/页面处理batch_scrape分支Crawlcrawl以该 URI 为种子爬取提取发现的页面与文档batch_crawl分支从引擎实现 crates/xberg/src/engine/extract_impl.rs 的分支代码UrlExtractionMode::Auto | UrlExtractionMode::Document走 scrapeUrlExtractionMode::Crawl走 crawl可以确认document模式只抓取目标页本身而crawl模式会继续跟随页面内发现的链接并把每个发现的页面/文档分别转化为结果。本文示例正是document模式——对应 fixture 里mode: document的配置。UrlExtractionConfig 全部参数除了ModeUrlExtractionConfigC# 侧见 UrlExtractionConfig.csRust 侧见 types.rs还支持以下参数完整 JSON 形态如下{ mode: document, crawl: { }, document_url_pattern: null, max_document_urls_per_result: 100, max_total_urls: 1000, allow_local_file_inputs: true, allow_file_uris: true }各字段含义与默认值字段类型默认值说明modeUrlExtractionModeauto上文所述的抓取模式crawlCrawlConfig内置默认策略底层 crawlberg 的爬取配置含max_depth、max_pages、max_concurrent、request_timeout_ms、rate_limit_ms等document_url_patternstring?null对文档中发现 URL 的可选正则过滤max_document_urls_per_resultuint?100每个提取结果最多跟随的 URL 数max_total_urlsuint?1000整次提取调用全局最多跟随的 URL 数allow_local_file_inputsbooltrue是否允许裸本地文件系统路径输入allow_file_urisbooltrue是否允许本地file://URI 输入内置默认 crawl 策略Rust 侧UrlExtractionConfig::default_xberg_crawl_config()值得特别说明max_depth: Some(1)、max_pages: Some(100)、max_concurrent: Some(10)、respect_robots_txt: true、soft_http_errors: true、stay_on_domain: true、allow_subdomains: true、document_url_depth: Some(1)。也就是说即便不显式配置引擎也会默认遵守 robots.txt、限制爬取深度与并发并对 HTTP 软错误做宽容处理——这些默认值正是单页提取默认安全可控的保障。底层原理crawlberg 引擎与批量共享 URLURL 提取的落地实现位于 crates/xberg/src/engine/extract_impl.rs整体依赖一个共享的 crawlberg 引擎实例单条 URLExtractInputKind::Uri分支进入extract_uri_input先由crawlberg_config(config)把ExtractionConfig.Url.Crawl编译为 crawlberg 的CrawlConfig随后按模式选择batch_scrape或batch_crawl批量 URL 去重共享当一次extract_batch中多个输入指向同一个 URL 时引擎会通过run_shared_url_group把同 URL 的输入合并只发起一次网络请求再把结果回填到各自输入槽位positions_for_url映射既节省请求又保证每个输入都有结果或错误超时语义批量模式下网络抓取由 crawlberg 内部的request_timeout_ms/rate_limit_ms管理extraction_timeout_secs则约束抓取后的转换提取阶段。抓取完成后返回的ExtractionResult结构types.rs包含results按发现顺序排列的ExtractedDocument列表errors非致命的逐输入错误ExtractionErrorItem含稳定错误码、错误类型、来源与消息summary聚合统计包括inputs、results、errors、remote_urls解析为远程 HTTP(S) 的 URI 数、pages_crawled爬取/抓取的 HTML 页数、documents_downloaded下载的非 HTML 文档数crawl_final_urls/crawl_redirect_count/crawl_unique_normalized_urls重定向最终 URL、重定向次数与去重归一化后的 URL 列表便于审计爬取轨迹。从 fixture 看验证方式mock 服务器与断言本示例对应 fixture url_html_page_extract.json 展示了官方如何端到端验证URL 提取行为测试先起一个本地 mock HTTP 服务器对GET /返回content-type: text/html; charsetutf-8的页面正文为htmlbodyh1Xberg URL Page/h1pHTML extraction through crawlberg./p/body/html$mock_url会被替换为 mock 地址输入为{kind: uri, uri: $mock_url}配置为{url: {mode: document}}断言共三条not_error调用不报错、results[0].content包含文本Xberg URL Page、results数量至少为 1。这意味着URL 提取的成功标准就是结果非空、正文包含页面真实文本、且结果数量符合预期。C# 端同样的 e2e 断言可在 e2e/csharp/tests 目录下的测试文件中找到通过XbergConverter.ExtractAsyncExtractionConfig.FromJson({})的统一调用模式其余语言绑定Go、Rust、Java、Python、Node 等也共享同一套 fixture 与语义。实战注意事项本地输入开关allow_local_file_inputs与allow_file_uris默认均为true即kind uri时也能直接传本地路径或file://URI。若你的场景只接受远程 URL如服务端不信任调用方应显式将这两项设为false。安全边界max_document_urls_per_result与max_total_urls是防失控爬取的关键闸门默认的max_total_urls 1000已经是跨整次调用的全局上限。批量场景下同 URL 共享引擎的设计也天然避免了重复请求放大。结果结构result.Results[0].Content是纯文本/可读正文如需 Markdown 或 HTML可在ExtractionConfig中设置output_format为markdown/html参考ExtractionConfig.OutputFormat与HtmlOptions。配合pages、keywords、chunking等配置还能在抓取后直接产出分页文本、关键词或分块结果适合直接接入 RAG 管道。异步与依赖URL 抓取依赖网络栈tokio 运行时与url-ingestion特性C# 绑定通过ExtractAsync直接返回Task调用方按 async/await 使用即可。相关资源C# 绑定类型定义UrlExtractionConfig.cs、UrlExtractionMode.cs、ExtractionConfig.csRust 核心配置与输入模型crates/xberg/src/core/config/extraction/types.rsURL 抓取引擎实现crates/xberg/src/engine/extract_impl.rs官方 fixture 与断言fixtures/url/url_html_page_extract.json同目录下还有url_crawl_linked_pages.json爬取模式、url_remote_text_document.json远程文本文档、url_gzip_encoded_document.jsongzip 文档等更多 URL 场景C# 端到端测试e2e/csharp/tests赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐Xberg C 绑定 URI 提取实战使用 ExtractAsync 从 URL 抽取 PDF 内容Xberg C 绑定 URI 提取实战使用 ExtractAsync 从 URL 抽取 PDF 内容 本篇技术指南聚焦 Xberg 官方 C 绑定中的 URI后端AI 应用NLPXberg C 绑定实战用 ExtractAsync 从 HTML 网页中提取表格数据Xberg C 绑定实战用 ExtractAsync 从 HTML 网页中提取表格数据 本文围绕 Xberg 仓库中 C 绑定的 HTML 表格提取 Smok后端AI 应用NLPXberg C 字节提取 API 实战通过 ExtractAsync 将 PDF 转为 Markdown 输出Xberg C 字节提取 API 实战通过 ExtractAsync 将 PDF 转为 Markdown 输出 本篇技术指南围绕 Xberg 的 bytes后端AI 应用NLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网