(九)分别记录访问过的页面与已发现的书
1. 两份去重状态对应两种工作
目录页的集合回答“这一页处理过没有”,详情任务的映射回答“这个链接安排过没有”。它们解决的重复不同,不能用一份书名列表同时代替。
| 动作 | 目录页数量 | 有序详情键 |
|---|---|---|
| 开始 | 0 | 空 |
| 处理第 1 页 | 1 | b101、b102 |
| 处理第 2 页 | 2 | b101、b102、b103、b104 |
| 处理第 3 页 | 3 | b101、b102、b103、b104、b105、b106 |
示例中的 links.setdefault(link, None) 只在第一次看到键时插入。字典保留首次插入次序,因此既能识别重复,又能沿目录发现顺序安排详情。第二次遇到 b102 不追加任务,但处理下一张卡片的循环继续推进。
2. URL 去重之后仍然检查记录身份
一个详情可能有正常地址和跳转别名;两个 URL 不同,最后读到的源站编号却相同。URL 去重减少重复请求,source_id 去重整理已经取得的记录。书名会被修改,也可能同名,所以这里用页面提供的稳定编号识别源站记录。
前面的业务书籍库按标题识别一本书;采集层保留源站编号,导入时再统一经过 validate_books。这些字段分别在处理自己的问题,没有把两个系统中的编号混作同一个值。