Skip to main content

Module extractor

Module extractor 

Source
Expand description

基于 DOM 结构聚类 + 多信号打分的文章链接提取器。

与纯正则方案(见 rules 模块)的区别:

  • 正则只能判断“这个 URL 长得像不像文章“,遇到 aei.org / newamerica.org 这种纯 slug 结构(/program/area/slug)就完全失效。
  • 本模块从页面结构入手:真正的文章列表在 DOM 里通常是“同一父级路径下 重复出现的相似节点“(比如同一个 <ul class="news-list"> 下的十几个 <li><a>)。把链接按其父级路径签名聚类,聚类越大,越可能是文章列表。
  • 再结合锚文本长度、URL 路径深度、导航词过滤、以及复用 UrlRule 的正则 规则,做加权打分,避免“一条正则命中/不命中“的非黑即白判定。

§示例

use crawlkit_parser::{LinkExtractor, ExtractorConfig};

let html = r#"
<html><body>
    <div class="news-list">
        <a href="/2024/01/15/story-one">第一条新闻标题</a>
        <a href="/2024/01/16/story-two">第二条新闻标题</a>
        <a href="/2024/01/17/story-three">第三条新闻标题</a>
        <a href="/2024/01/18/story-four">第四条新闻标题</a>
    </div>
</body></html>
"#;

let extractor = LinkExtractor::new(ExtractorConfig::default());
let results = extractor.extract(html, "https://example.com/");

assert_eq!(results.len(), 4);
for link in &results {
    println!("{} (score: {})", link.url, link.score);
}

Structs§

ExtractedLink
提取到的候选文章链接。
ExtractorConfig
提取器配置,按需调整以适配不同站点。
LinkExtractor
基于 DOM 结构聚类 + 多信号打分的文章链接提取器。