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
- 页面内容和已抓页面的关系。