Skip to main content

Module focus

Module focus 

Source
Expand description

带查询的整站爬取:相关性优先的调度队列(best-first)、链接打分和自适应停止。

链接分数 = 锚文本、URL(主机名和路径)、链接所在那一行各自覆盖了多少查询词(加权), 再加上所在页面本身的相关度,最后按深度衰减。查询词的权重按已抓页面的文档频率调整 ([weights]):每页都有的词不再算数,少见的词才是证据。家具页(新闻、关于、法律页脚、 带日期的路径)和枢纽页降权(furniture);队列出队时按簇分散([queue]), 一个子树吃不完预算;自适应停止只拿相关页面当证据([adaptive])。 分数相同的链接按发现顺序出队,所以完全不相关的站点上,顺序退化成广度优先。

Modules§

furniture
家具页和内容集群的识别:新闻、活动、关于、法律页脚、搜索、标签、带日期的路径。

Structs§

Adaptive
自适应爬取的状态:每个查询词的证据数、已经见过的相关段落、连续没有新信息的页数。
BestFirst
相关性优先的待爬队列。容量由调用方按“还能再抓几页“给出,满了以后新链接只有比队里最差的 好才挤进来:队列长度不超过 limit,和广度优先一样内存有界。 每项带一个打分依据 S(super::LinkSignal),词权重变了以后按它重新打分(Self::rescore)。
Focus
查询和从它派生的打分规则。
Harvest
按某种分法(子树或簇)统计的收获。
LinkSignal
链接分数的组成(见 Focus::link_signal)。
PageSignal
页面相关度的组成:各查询方面的证据([facet]),枢纽页和家具页的折扣。 fixed 是直接给定的相关度(没有页面可看的链接,测试)。

Enums§

Offer

Constants§

LIST_FREE
同一页上指向同一个簇的链接超过这个数(新闻列表、展品列表),每条按 sqrt(上限/条数) 打折。 [策略] 先验包 v0:0.81 的现值
MIN_RELEVANCE
相关度低于它的页面算无关:不计入证据,而且找到相关内容之后连着出现就算“抓完了“。 附件收割也用它。0.81 换成按方面打分的相关度([super::facet])后,两条门槛按 1,833 个 人工判过的页面换算:保留下来的有用页比例和换算前一样(0.12 → 0.05 都约 90%, 0.3 → 0.15 都约 52%),保留下来的页面里有用的比例略高。

Functions§

cluster_key
簇的键:主机加第一段路径(news、admissions、exhibition…)。 各个主机的首页(/、/en/、/index.html)同属一个簇:大学首页链着几十个院系子站, 每个子站首页都是不同的主机,不归到一起的话按簇分散反而会把预算摊给它们。
is_blind
链接的分数不高于栏目保底分:它本身没有查询词的线索,抓它是“盲探“(自适应停止用, 见 Adaptive::observe)。种子页(分数无穷大)不算。
link_contexts
从正文 Markdown 里找出每个链接(去掉 fragment 的绝对地址)的锚文本和上下文。 导航栏等不在正文里的链接没有上下文,调用方用 DOM 里的锚文本代替。同一链接取第一次出现。
subtree
页面所在的子树:别的主机(子站)整个算一棵;种子主机上按页面的上级目录分,跳过开头的 语言段,最多两段(/research-highlight/某篇 → research-highlight, /en/education/programmes/x → education/programmes)。只按第一段分的话,整站都在 /en/ 下的站点就成了一棵树,判它枯竭等于停掉整个爬取。seed_host 已去掉 www.、小写。
url_shape
网址的“形状”:同一模板生成的页面(/item/123、/item/456)形状相同。路径段全是数字的写成 {n},含数字的写成 {id},其余照原样;查询串只留参数名(排序)。结构化抽取缓存 LLM 生成的 schema 时用它作键的一部分(0.97)。