ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Xberg 递归文档 URL 提取实战:从入口页面自动发现并追踪文档链接

Xberg 递归文档 URL 提取实战:从入口页面自动发现并追踪文档链接 后端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 的递归文档 URL 提取能力当以document模式抓取一个远程页面后Xberg 会从提取结果中自动发现文档内嵌的超链接、引用与纯文本 URL并继续逐层抓取、提取这些被链接到的文档形成一条完整的入口页 → 链接文档提取链路。读完本文你将掌握url.crawl系列配置项follow_document_urls、document_url_depth、respect_robots_txt等的用法、默认值与边界行为并通过 Elixir 绑定与 Rust 源码实现理解其底层 BFS 队列的工作机制。一、功能定位document 模式下的递归链接追踪Xberg 的 URL 提取共有三种模式见 types.rs 中的UrlExtractionMode模式枚举值行为autoUrlExtractionMode::Auto默认抓取后对 HTTP(S) 资源进行分类自动决定后续行为documentUrlExtractionMode::Document把入口 URI 当作单个远程文档/页面处理crawlUrlExtractionMode::Crawl从种子 URI 出发爬取并提取发现的页面与文档递归文档 URL 提取属于document模式下的增强行为入口页面本身被当作一个文档提取提取完成后Xberg 检查该结果中出现的链接再对每个被发现的链接执行同样的提取。这与crawl模式的页面爬取不同——前者专注于文档链接的逐级提取后者专注于整站页面的遍历。两者可以组合使用但本文聚焦于document模式下的递归提取链路。二、Elixir 调用示例完整可运行代码原文档url_recursive_document_urls.md给出的核心代码片段如下它完整地演示了一次递归提取input_value %Xberg.ExtractInput{kind: uri, uri: https://example.com} result Xberg.extract_async(input_value, {\url\:{\crawl\:{\document_url_depth\:1,\follow_document_urls\:true,\respect_robots_txt\:false},\mode\:\document\}}) IO.inspect(result.results) IO.inspect(Enum.at(result.results, 1).content)关键点拆解输入构造%Xberg.ExtractInput{kind: uri, uri: https://example.com}声明这是一个 URI 类型的提取输入与kind: bytes的字节输入区分开。Xberg.ExtractInput结构体由 Elixir 绑定自动生成位于 packages/elixir/lib 下的各模块中。配置注入第二参数是一段 JSON 字符串作为extract的完整配置传入。在 Elixir 绑定中Xberg.extract/1接受 keyword 选项:input与:config内部会把 map 通过Jason.encode!/1序列化为 JSON 后委托给Xberg.Native.extract_async见 xberg.ex因此你也可以等价地写作Xberg.extract( input: %{kind: uri, uri: https://example.com}, config: %{ url: %{ mode: document, crawl: %{document_url_depth: 1, follow_document_urls: true, respect_robots_txt: false} } } )结果读取result.results是一个文档结果列表。在此配置下Enum.at(result.results, 0)是入口页面的提取结果Enum.at(result.results, 1)是入口页面链接指向的文档的提取结果——这正是递归的体现。测试断言要求results[1].content包含链接文档正文中的特征文本详见后文测试验证一节。三、url.crawl 关键参数详解递归提取的开关与深度由url.crawl下的三个参数共同控制全部映射到 Rust 侧crawlberg::CrawlConfig的对应字段配置类型定义见 types.rs参数类型作用mode字符串取值为auto/document/crawl本文场景固定为documentfollow_document_urls布尔是否启用文档链接递归追踪。为false默认时即使入口页包含大量链接也只提取入口页本身不会继续抓取链接目标document_url_depth整数递归深度。1表示只追踪入口页直接链接到的文档2表示这些文档里的链接还会继续追踪依此类推respect_robots_txt布尔是否遵守目标站点的robots.txt。示例中显式设为false以便在受控测试环境mock 服务器中无阻碍地抓取其中document_url_depth有一个重要的兼容性回退逻辑见 extract_impl.rsconfig .url .crawl .document_url_depth .or_else(|| config.url.crawl.max_depth.map(|depth| depth as u32)) .unwrap_or(1)即优先使用显式的document_url_depth若未设置则回退到max_depth两者都未设置时默认1。另外当解析出的深度为0时follow_recursive_document_urls会直接返回等效于关闭递归见 extract_impl.rs。respect_robots_txt的默认值是true见 types.rs 的default_xberg_crawl_config这意味着在真实生产环境中默认行为是遵守站点的爬取约束示例代码将其关闭仅适用于测试与已获授权的抓取场景。四、默认值速查xberg 预设的爬取策略UrlExtractionConfig::default_xberg_crawl_config()给出了 xberg 内置的默认爬取策略types.rs与递归文档链接直接相关的完整默认值如下配置项默认值说明max_depth1通用爬取最大深度max_pages100单次爬取的最大页面数max_concurrent10并发抓取数respect_robots_txttrue默认遵守 robots.txtsoft_http_errorstrue将 HTTP 错误视为软错误处理stay_on_domaintrue默认停留在种子域名内allow_subdomainstrue允许追踪子域名document_url_depth1文档链接递归深度默认 1 层此外UrlExtractionConfig还有两个与递归追踪配套的全局限额types.rsmax_document_urls_per_result单个提取结果中最多追踪的链接数默认100max_total_urls整个提取调用中追踪的 URL 总数上限默认1000。这两个限额在源码中以软上限方式实现见下一节的enqueue_discovered_urls用于防止递归提取演变为无限抓取。五、底层原理BFS 队列驱动的递归提取链路递归文档 URL 提取的核心实现在 extract_impl.rs整体是一个基于队列的广度优先遍历BFS入口检查follow_recursive_document_urls首先读取follow_document_urls与深度二者任一为假/零则直接返回。正则预编译若配置了document_url_pattern可选正则过滤会先编译为regex::Regex编译失败会返回校验错误invalid document_url_pattern regex。入队enqueue_discovered_urls遍历当前结果集从每个ExtractedDocument中提取链接 URL逐个做过滤、去重seen集合后压入队列并附带当前深度。逐项提取主循环从队列头部弹出(uri, depth)调用extract_one执行真正的提取若当前深度小于max_depth则对提取结果再次执行入队形成层层展开。汇总每轮提取后把remote_urls、pages_crawled、documents_downloaded等计数累加进总输出results与errors分别合并。其中从结果中发现链接的函数urls_from_resultextract_impl.rs使用两条互补策略结构化链接遍历结果中的uris仅采纳UriKind::Hyperlink超链接、Reference引用、Citation引文三类纯文本 URL用正则https?://[^\s)\]]扫描正文content并对结尾处的标点.,;:!?做裁剪。被发现的 URL 是否值得追踪由should_follow_discovered_url决定extract_impl.rs过滤条件依次为必须是http/https协议若配置了document_url_pattern则必须匹配若stay_on_domain为真则必须属于种子域名或allow_subdomains开启时的子域名。六、测试验证mock 服务器上的可复现断言仓库用端到端 fixture 固化并验证了这一行为对应的配置与断言定义在 fixtures/url/url_recursive_document_urls.jsonmock 响应/返回一段 HTML内容为h1Recursive source/h1并含有一个指向/linked.txt的链接/linked.txt返回纯文本Recursive document target reached by Xberg.。配置与本文示例完全一致——mode: document、follow_document_urls: true、document_url_depth: 1、respect_robots_txt: false。断言not_error整个提取调用不报错count_min(results, 2)结果至少包含 2 个文档入口页 链接文档contains(results[1].content, Recursive document target)第二个结果的正文确实来自被递归追踪到的链接文档。该 fixture 的 id 为url_recursive_document_urls属于url分类、recursive标签由 alef 工具链自动生成跨语言代码片段在 docs-site/src/snippets-generated 下同时存在 Elixir、Python、Java、Go、Rust、C#、Ruby、Swift、Dart、PHP、Zig、TypeScript、Kotlin-Android、C、Wasm 共 15 种绑定版本说明该配置与语义在全部语言绑定上保持一致。七、实战注意事项入口页与链接文档的索引关系results[0]恒为入口 URI 的提取结果递归得到的链接文档按发现顺序追加。若想拿到纯文本正文请像示例一样访问Enum.at(result.results, n).content。深度与总量的平衡递归提取的代价随深度呈指数增长。生产环境建议显式设置document_url_depth通常1足够并保留默认的max_total_urls: 1000与max_document_urls_per_result: 100上限。robots.txt 的取舍默认respect_robots_txt: true。仅在自有站点或受控测试如 fixture 中的 mock 服务器中才建议关闭。域名约束默认stay_on_domain: trueallow_subdomains: true递归不会跨出种子站点如需精确圈定范围可配合document_url_pattern正则做白名单过滤。链接形态兼容追踪既支持 HTML 结构中的超链接也支持正文中以纯文本形式出现的http(s)://URL两种来源都会被纳入队列。错误隔离单个链接文档抓取失败不会中断整条链路——错误会被追加到output.errors其余链接继续处理见 extract_impl.rs。八、延伸阅读配置类型与默认值 crates/xberg/src/core/config/extraction/types.rs递归提取核心实现 crates/xberg/src/engine/extract_impl.rs端到端 fixture fixtures/url/url_recursive_document_urls.json对比场景——crawl模式的链接页面爬取 fixtures/url/url_crawl_linked_pages.jsonElixir 高层 API 定义 packages/elixir/lib/xberg.ex各语言绑定的同主题代码片段 docs-site/src/snippets-generated/elixir/url/url_recursive_document_urls.md赞分享后端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点击查看免费下载相关推荐使用 C 在 Xberg 中实现递归 URL 文档提取从页面链接一路追到文件内容使用 C 在 Xberg 中实现递归 URL 文档提取从页面链接一路追到文件内容 Xberg 是一个以 Rust 为核心的 Polyglot 文档智能引擎其后端AI 应用NLPxberg C 语言递归 URL 文档抽取实战follow_document_urls 爬取机制解析xberg C 语言递归 URL 文档抽取实战follow_document_urls 爬取机制解析 本文基于仓库中自动生成的 C 语言用例 url_recu后端AI 应用NLPXberg C FFI 实战用 xberg_extract 从远程 URL 提取文本文档Xberg C FFI 实战用 xberg_extract 从远程 URL 提取文本文档 本文以 Xberg 仓库中自动生成的 C 语言 E2E 片段 url后端AI 应用NLP上一篇一站式游戏Mod管理神器XXMI-Launcher完全使用指南下一篇终极游戏模组管理指南XXMI-Launcher完全使用手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表