JackonYang/distributed-vertical-crawlers

批量导入

Closed this issue · 5 comments

需求描述:

支持批量导入 csv 文件中的全部信息。

demo 数据如下:

名字,电话,简介
小a,13812345678,
小b, 025-88991234, 高中同学

格式详细说明与字段校验:

  1. 前 n 行是注释或文件头,跳过不解析。demo 数据中是前 1 行。
  2. 第一列为姓名,不能为空。
  3. 第二列为电话号码,不能为空,仅包含数字和 -。建议使用正则表达式校验,后续优化正则的严格性。
  4. 第三列为简介信息,可以为空。

处理流程。

正常场景:
用户调用接口 A 试图导入csv文件。
A 对文件进行解析,做数据预处理。主要是合法性校验和格式化。
A 将格式化后的数据传递给接口 B, B 实现数据写入。

异常场景及其处理:主要涉及名字重复时的处理方式。

  1. 电话也重复。不论brief信息是否相同,不插入,不变更原数据。
  2. 电话不重复。若brief不为空且信息相同,则按照为已有individual增加电话处理。
  3. 电话不重复。若brief均不为空,且信息不相同,则按照新增idividual处理。插入名字、电话、brief信息,生成 uid。
  4. 电话不重复。至少一个brief 为空,与用户进行交互,请用户确认采用上述的哪种处理方式。

具体任务:

接口A 主要负责文件解析、字段校验和格式化。
接口B 主要负责数据写入。

** 先实现接口B,包括正常场景和 4 种异常场景的处理。 **
接口的传入参数使用指向函数的指针,用于处理与用户的交互行为。
该交互行为可能发生在命令行、前端web页面、或其他交互界面中。
例如:
insertmany(data, *op_when_error)

电话号码还有字符串的校验,最好你在python做了,c的字符串处理功能还是没有python强的,功能是可以实现,不过代码量肯定比python大,你在抓页面的时候,存在文件里面的数据,格式保证正确就可以,c的接口直接读你的文件,然后写入数据库,或者你在python端直接写入数据库,还是cvs是什么格式的文件,你抓下来的数据最好存在json里面,这样我解析起来更方便了,用了json就不用烦什么解析,校验,格式化了。你看看你的想法是什么。我们再交流。

  1. 字符校验,我用python写。我调用你的接口写入数据库。给你传 json 格式的数据。
  2. c 提供接口的方式。接口无需涉及文件读写的操作。测试用例中,自己构造标准 json 数据测试通过即可。非标准数据返回error(此处error均只错误信息,不特指error字符串)

这样还是我们最早的分工原则:c 只负责提供底层数据库读写接口,将标准格式的数据写入数据库。
校验类的工作,均有python实现。

能否说下你phthon端从页面抓取的数据都有哪些?

字段跟现在处理的保持不变,依旧只涉及 name, phone, brief.

调用db的接口时,只传 name,phone,brief三个字段。
其中,name和phone从页面解析,二者均不为空且合法,否则丢弃该条记录。
对于重名的,会要求用户输入brief。如果重名且用户拒绝输入,默认brief是人人网的ID
如果不重名,默认brief为空。

我调整抓取到的字段来适配底层的接口。

后面增加字段时,底层要提供新的接口的,到时候在具体讨论新增字段的格式、内容和处理方式。