Skip to main content

Module frontier

Module frontier 

Source
Expand description

爬取前沿的质量规则:哪些 URL 是同一页的不同写法,哪些不值得抓,哪些是陷阱。

  • URL 清洗:去掉跟踪参数(utm_*、fbclid、gclid…)和会话 ID(;jsessionid=、PHPSESSID…)。 参数名单取自 courlan 的跟踪参数规则和 Heritrix 的会话 ID 规则,只收确定是跟踪或会话的名字, ref、source、id 这类也可能决定页面内容的参数不动。
  • 抓取前过滤:图片、音视频、压缩包、字体、脚本样式这类转不成文本的文件; 同一段路径连续重复三次以上(Heritrix 的 PathologicalPath 规则,典型是坏掉的相对链接 more/ 越叠越长)、路径层级过深、URL 过长。
  • 按 URL 模板学习陷阱(自研):把 URL 归成模板(路径里的数字和长 ID 换成占位符, 查询只留参数名),记下每个模板抓到的页面有多少是重复内容(全文相同,或者只差数字, 比如日历的“下一月“、翻到头的空列表页、排序筛选的组合)。一个模板抓了几页、大多是重复, 就把它降级:它的 URL 排到所有正常 URL 之后。只降级不丢弃,正常页面抓完、上限还没到时 仍然会抓它们;模板后来抓到新内容,比例下降,又会恢复正常。
  • URL 改写规则学习(DUST,Bar-Yossef 等 “Do not crawl in the DUST”,以及 Dasgupta 等 KDD 2008 的 URL 改写规则去重):两个 URL 的正文完全相同时,比较它们的差别——多了一个查询参数 (print=1),或者路径末尾多了一段(index.html、more/)——记成候选规则;同一条规则 被两对不同的页面证实后生效,之后发现的 URL 先按规则改写再去重,同一页的其他写法不再抓。 参数规则默认只去掉特定的值(page=1 和不带参数相同,不代表 page=2 也相同); 同一个参数名有两种以上取值都被证实,才去掉整个参数。

Structs§

Learner
Tiered
广度优先的两层队列:模板降级的 URL 排在降级层,正常层空了才出队。 正常层按主机分队列(同 Heritrix 的每主机 work queue),主机之间轮流出队,跳过在途请求已满的主机 (同 Scrapy 的 DownloaderAwarePriorityQueue),一个主机排得再长也不会挡住其他主机。 总长度由调用方按爬取上限控制;满了以后新来的正常 URL 可以挤掉降级层最后面的一个。

Enums§

Seen
页面内容和已抓页面的关系。

Functions§

clean
清洗一个发现的 URL:去 fragment、路径里的会话参数、跟踪和会话查询参数、路径里多余的 /。 其余查询参数保持原有顺序(排序只用于去重键,见 crawl::normalize)。
shape
URL 模板:主机 + 路径(数字串换成 #,含数字的长段换成 *)+ 排好序的查询参数名。
shape_key
shape 的 64 位哈希,队列里每个 URL 带着它,判断降级不用重算模板。
skip
不值得抓的 URL:二进制文件、路径陷阱、过深过长。