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§
- Extracted
Link - 提取到的候选文章链接。
- Extractor
Config - 提取器配置,按需调整以适配不同站点。
- Link
Extractor - 基于 DOM 结构聚类 + 多信号打分的文章链接提取器。