Python编写单词库爬虫解决问题记录

 

序号 问题
1 根据单词词性自动创建字段
2 不同名称但相同功能字段重复创建导致字段冗余
3 同个词性含多个不同位置的中文翻译使sql语句构造时字段重复插入
4 数据存储类型选择不合理导致数据过长无法存储
5 连接超时导致程序退出
6 随机延时访问降低IP被禁几率
7 每隔一定时间休眠程序
8 每次获取到输入后查询单词存在性花费在数据库的时间过长
9 连接错误返回结果为HTML页面,导致音频下载错误

对于1: 获取到单词属性后,比较是否已经创建对应字段,无则创之。

 

对于2: 将相同功能的字段,如 n./adj.    a./ adj.等在获取属性的时候,修改成统一的字符串存储起来,后面进行自动创建工作时才不会创建冗余字段。

 

对于3: 存储已构造sql语句中包含的字段和字段值,之后检测到获取的字段重复,如重复出现翻译的词性是 n. 则忽略此次的sql语句字段添加,并找到上一个重复的字段值,添加回车符后,将此次的翻译结果作为附加的字段值续接在其后进行插入。

 

对于4: 原来用的是varchar,改成text后解决问题

 

对于5: 需捕获超时错误,捕获成功后,重新连接,再次请求数据,为防止网络断开导致死循环,可以添加网络未重连成功的次数,超过一定次数退出程序或者延迟一段时间再进行重连,重连成功后清零该计数值。

 

对于 6 & 7: 用random模块来解决,并计数当前获取的单词数量,超过一定数量,进行长时休眠(10s~30s),然后清零单词数量计数值

 

对于8: 选择一次性获取全部sql数据中的单词,并保存在一个list中,以后每成功写入一个翻译结果,将此新单词附加到list中,用于未来比较。

 

对于9:  用命令 file <filename>检测文件内容是否为HTML,如果是,返回获取音频的函数,进行重新下载,设置最大尝试次数,超过则退出或者放弃本次操作继续执行程序的其他部分。