Python 现代开发学习笔记

(九)分别记录访问过的页面与已发现的书

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 不追加任务,但处理下一张卡片的循环继续推进。

九张卡片逐项检查URL键,重复项保持原队列,新项依次追加为六个详情任务

2. URL 去重之后仍然检查记录身份

一个详情可能有正常地址和跳转别名;两个 URL 不同,最后读到的源站编号却相同。URL 去重减少重复请求,source_id 去重整理已经取得的记录。书名会被修改,也可能同名,所以这里用页面提供的稳定编号识别源站记录。

前面的业务书籍库按标题识别一本书;采集层保留源站编号,导入时再统一经过 validate_books。这些字段分别在处理自己的问题,没有把两个系统中的编号混作同一个值。

笔记正文与全部题解 · Ctrl / ⌘ K