-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
问题背景
- 此项目的爬虫从学校的排课网站爬取课程列表的表格内容,爬取的数据用于 SHU 排课助手(以下简称排课助手)。由于排课助手的架构原因,爬虫脏数据可能会对排课助手的数据造成不可逆的副作用,例如被删除的课程会从用户的待选列表中移除,上课时间修改后如果与其他已选课程时间冲突则会被取消选择等。因此,有必要保留数据校验和人工复审机制,确保数据结构的正确性,减少脏数据对排课助手用户的影响。
- 目前已有一个
term_diff函数将上次结果和当前结果进行比较,得到增加、修改、删除的数组。此前存在、现在被禁用的数据校验机制是对可能产生副作用的主要字段修改,和全部增加与删除变动标记为需要人工复审,创建 Pull Request 进行手工合并。这个方案存在需要人工复审的频率过高的问题,使数据更新效率受限,但在长期使用中,也确实发现了一些由于学校网站改版导致的脏数据问题,成功避免了脏数据进入排课助手。因此,我们需要设计更合理的数据校验和人工复审机制,防止脏数据污染,同时节省人工复审的频率。
需求
- 设计并实现一个更合理的数据校验和人工复审机制,能够检测到表格结构变动等原因导致的脏数据,减少人工复审的频率。
- 由于脏数据通常只来自网站表格结构的变化,因此可以通过变更的数据量判断是否需要复审。
- 爬虫脏数据会对使用方 SHU 排课助手造成不可逆的副作用,需要尽可能避免脏数据。
实现思路
-
对比结果:
is_major_update函数中,可将term_diff的结果用is_major_change函数进行筛选,得到需要进行校验的数据变动,对增加、修改、删除的变动进行计数。 -
根据各类型变动的数目进行处理:
- 对于增加数据的变动,可以不需要人工复审,或设定一个阈值,对大比例突增的情况标记需要人工复审;
- 对于修改数据的变动,可以设定一个阈值,例如原数据量的 75%,当修改的数量大于阈值时,则认为发生了数据结构变化,标记需要人工复审;
- 对于删除数据的变动,可以设定一个阈值,例如原数据量的 25%,当删除的数量大于阈值时,则认为爬虫运行可能遇到了异常,标记需要人工复审。
通过以上机制,我们可以在保证数据质量的前提下,减少人工复审的频率,提高更新效率。
进一步改进
- 我们可以在爬虫处优化代码或增加校验,例如对学校排课网站的表头进行校验,发现表格结构的变化,从而直接标记需要人工复审。
- 目前 Pull Request 没有展示主要变动内容的摘要,只能通过 File changes 观察,人工复审时查看数据比较麻烦;下一步可增加自动生成 Markdown 摘要,使变动内容更直观展示。
- 另一种思路,是否可以通过理解并识别爬虫结果的方式,预先定义一些字段的规则对数据进行校验。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels