跳到主要内容

跟踪策略

跟踪策略(Follow Policy,历史因素或称 Domain Policy)是决定着 Benjamin 是否去爬取的配置项,仅满足 Follow Policy 的配置 Benjamin 才会爬取其并生成 Target。

信息

在 entry_points 列表中所配置的 URL 将始终爬取,不受 Follow Policy 的影响。

参考:tophant.benjamin.FollowPolicy | tophant.benjamin.x.entity.FollowPolicy

跟踪策略由三部分组成:featured_url + policy + policy config

可使用如下字段指定跟踪策略:

  • featured_entry_point 指定 featured_url(如未指定,使用 entry_points 中的第一个 URL)
  • follow_policy.policy 指定 policy
  • follow_policy.* 指定 policy config(例如是否忽略端口等)

如果某些情况下,需要指定多个跟踪策略,可以使用 Site(sites 参数)来实现,具体请阅读下文 多跟踪策略

策略

参考:Policy

目前支持四种策略

  • SameTLD
  • SameDomain
  • SameDir
  • SameSLD

SameTLD

SameTLD 比对时仅会匹配顶级域名是否一致。

信息

根据标准的定义,SameTLD 实质上为 SameSLDAndTLD,或 SameTLDPlusOne,该名称仅为简写,不要被误导

例如,以下域名均会提取出 baidu.com TLD:

  • baidu.com
  • x.baidu.com
  • x.y.z.baidu.com

在后续决策新 Target 时,以下也均可与 baidu.com TLD 进行匹配:

  • baidu.com
  • x.baidu.com
  • y.baidu.com
  • x.y.z.baidu.com
  • a.b.c.baidu.com
警告

无法在 featured_url 为 IP 时使用该 policy

为历史兼容,暂时会在检测到该行为时自动切换为 SameDomain,未来会在 validate 阶段报错

SameDomain

SameDomain 比对时会匹配域名是否一致。匹配时必须完全一致才会允许爬取。

例如,baidu.com 仅可匹配 baidu.com,而 x.baidu.com 等均不会被认为是同一域名; 类似的,x.baidu.com 仅可匹配 x.baidu.comy.baidu.com y.x.baidu.com baidu.com 等也不会被认为是同一域名。

SameDir

SameDir 比对时会在匹配域名一致(SameDomain)的前提下,进一步匹配路径前缀是否一致。

例如当指定 featured_url 为 baidu.com/abc/ 时,会匹配任意以 baidu.com/abc/ 开头的 URL,例如

  • baidu.com/abc/def
  • baidu.com/abc/def/
  • baidu.com/abc/def/ghi

而以下 URL 则不会匹配

  • baidu.com/abc(但如果其在 entry points 列表中则会去爬取)

为避免误解该功能,所设置的 featured_entry_point 必须以 / 结尾,否则会在 validate 阶段报错。

SameSLD

SameSLD 比对时仅会匹配二级域名(不含顶级域名)是否一致。

SameSLD 会遵循 ICANN 的域名数据库进行 SLD 的提取,例如,baidu.combaidu.com.cn 的二级域名均为 baidu,而 baidu.abc.com 的二级域名则为 abc

以下域名均会提取出 baidu SLD:

  • baidu.com
  • baidu.com.cn
  • x.baidu.com
  • x.baidu.com.cn

在后续决策新 Target 时,以下均可与 baidu SLD 进行匹配

  • baidu.com
  • baidu.com.cn
  • x.baidu.com
  • x.baidu.com.cn
  • y.baidu.com
  • y.baidu.com.cn
  • x.y.z.baidu.com
  • x.y.z.baidu.com.cn

该策略不支持传递 IP 作为 Featured EntryPoints(在 validate 阶段会报错)。

如果传递的 Featured EntryPoints 为域名,但无法提取出 SLD,则会使用它以 . 分隔的倒数第二个部分作为 SLD,例如 baidu.xxxxx.baidu.xxxx 会提取 baidu 作为 SLD,但如果传递了一个不含任何 . 的域名(例如 baidu),则会在 validate 阶段直接报错。

配置

ignore_port

当指定了 ignore_port = true(默认为 false)时,端口不会被纳入比对的考虑范围内。当前,所有策略均支持 ignore_ports 配置。

alternative_domain_suffix

当指定了 alternative_domain_suffix 时,在比对时会将该列表中的后缀的 URL 视为相同。

例如,当指定了 alternative_domain_suffix: [".com", ".com.cn"] 时,baidu.combaidu.com.cn 会被视为相同的域名。

警告

使用时的注意事项:

  1. 为了避免错误理解该功能,所有子项需要以 . 开头,否则将会在 validate 阶段报错
  2. 如果指定时,至少有一个应当可以作为 featured_url 的 suffix(例如 featured_url = baidu.com 时 suffix 必须有 .com,当 featured_url = baidu.com.cn 时 suffix 至少有 .com.cn.cn),否则会在 validate 阶段报错
  3. 如果指定时,应当至少指定两个 suffix,否则会在 validate 阶段报错
  4. 无法在 featured_url 为 IP 时使用,否则会在 validate 阶段报错
  5. 该选项不支持 SameSLD 策略,如果指定了该策略,会在 validate 阶段报错

请谨慎使用该配置,该配置会导致 FollowPolicy 的计算时间线性增长

如果指定的 alternative_domain_suffix 配置中有多个可以作为 featured_url 的 suffix,则会使用「最长」的 suffix。例如,当指定了 alternative_domain_suffix: [".com", ".com.cn", ".cn"], featured_url: "baidu.com.cn" 时,会认为 baidu.com baidu.com.cn baidu.cn 相同(而不会出现认为 baidu.com.com baidu.com.com.cn baidu.com.cn 相同的情况)。

备注

如果指定的 Policy 是 SameTLD 时需要注意在生成完相同 URL 时是会分别计算 TLD+1 的。

例如,指定了 alternative_domain_suffix: [".com", ".cn"], featured_url: "baidu.com.cn" 时,不会报错,生成的等效 url 为 baidu.com.combaidu.com.cn,而进一步计算 TLD+1 的结果为 com.combaidu.com.cn

多跟踪策略

有时,可能需要指定不止一种跟踪策略,例如想要实现如下的爬取规则:

  • 爬取 baidu.com 下的所有子域名
  • 爬取 abc.baidu.com 这一单一域名

这时可以通过指定两条跟踪策略来实现:url: baidu.com, policy: SameTLDurl: abc.baidu.com, policy: SameDomain

多跟踪策略使用 TaskConfigsites 配置参数来实现(类型为 repeated Site)。

信息

sites 之间的关系为「或」,URL 满足任一 Site 均会被爬取

当指定 sites 参数时,所指定的 sites 将和原 featured_entry_point + follow_policy 组成的 site 做并集共同爬取,因此也可以认为 sites 的含义实质上是 extra_sites