blog mail me! feed

Stage2 开发笔记

Sept 9
完成了基于栈的深度优先目录爬虫原型, 不过在实验爬的过程中, 各种古怪的Exception无数次打断爬虫工作,
这就是错误处理做得烂的恶果啊…

工作最后被打断在对含空格, 尤其是连续空格的文件名处理上, 苦想了半个小时, 也没想好怎么更快的通过split函数处理.

Sept 10
基于正则重写了字符串处理, 结果性能还比该死的split+filter高.
第一次看着爬虫模拟爬行, 处理完了清水河畔的202.115.22.16:21的FTP的所有目录, 接下来开始处理文件.

昨天大概想了下, 对于目录内只有文件而没有子目录的情况, 可以做一个FLAG, 这类的目录可以只判断最后修改时间即可, 没有发生修改则无需再进目录爬内容, 其他的情况都需要执行CWD再爬行.

太阳落山, 实验了下爬出的所有目录的写入数据库, 习惯了数据入库前的数据转义, 找了半天Python里转义与反转义的函数, 后来恍然大悟, 文件名是不可以有这些需要被转义的字符的. XD
想了很久的文件比对列表重建, 后来还是选择了相对容易实现, 和容易比对的平面dict重建.

将所有的目录都放在一个平面的dict中, key是文件夹的path(要不要用path的hash呢?), value是另一个dict, 定义了数据库中对应的唯一ID, 以及一个目录下文件的”files”的dict入口.

Sept 11
完成了对爬虫算法的所有优化, 即本地缓存的构造与文件/文件夹是否更新的检查.
在爬虫完成了首次对FTP仓库的探索后, 之后的每次爬行会进行可能的, 不含推测的最大优化,
这样, 每次的爬行可以避免重复的抓取长时间不会更新的文件.

对于如何在Python和PHP中构建相同的分词体系, 还在考虑中,
原来考虑过在Python里使用pymmseg-cpp, 但是后来担心词库和分词算法的不同, 使PHP和Python下的key不匹配, 结果就是, 搜索失败.

自己现在的想法是做一个scwsd, 即基于scws的守护程序, 监听某个端口完成分词API的执行,
即可做到分词的一致性.
*EDIT* 觉得似乎就在php里完成分词和Xapian Index最简单, 数据库里只需要做一个默认的字段, php每次检查尚未分词的条目进行分词即可 :)

当前还没有考虑好, 对于已删除的文件或文件夹的处理方法,
是建立一张回收表, 还是建立一个”已删除”的字段呢?

Sept 16
添加了对于部分无效目录的判断, 防止在爬行时出现的无效目录导致的无数bug的问题.
另外在些错误自陷时, 将当前的目录移除出缓存, 保证了最后处理”已删除目录和文件”时出现的冲突.