ShOnline爬虫小结

前一段那个事儿的不行的『计算网络心理学』的爬虫大作业终于是告一段落了,虽然是强行告一段落。在我们组同学纷纷不给力,我懒癌发作,其他任务缠身的情况下,只是做到了自己满足(反正技术学得差不多了)的地步,估计老师还是很不满意(把上课的学生当作免费劳动力是不对的)。

这个作业的整体代码难度倒也不算难,需要留心的地方无非就是用BeautifulSoup解析、Regex处理文本两块。本来想着数据存到文件系统里虽然速度快,不过查询不好用。后来一想老师虽然没说运行环境,不过应该不能自行配置,就SQLite那个残废的样子,还是用文件系统凑活下吧。

关于Regex处理文本的方法,在去除Discuz!论坛生成的乱码这个里面已经说的差不多了。无非就是写个『筛子』,『筛』文字的过程,没什么好说的。

至于bs,那就更简单了。Regex的『筛子』还要自己写,bs的筛子都是写好的,直接拿来用就行。随便看看文档很容易就能上手。

我觉得值得我学习的就是老师要求的各个模块之间传递的格式是类似于json的那种样子,用一个dict传递。这样将各个模块分的很清晰,多个人开发的话,接口的地方清晰,所以容易沟通且不容易出错。如果换我估计我是想不到这种样子传递的,值得学习。

所示说整个作业没什么难的,难的就是耗时间,人手不够。要说什么是最需要批判的,就是这个课的需求总是变化

这个课是一个老师上课,然后由另外一个不知道是博士还是留所的年轻老师检测代码。然后坑爹的是,老师上课的时候用两个文档提出了一堆要求,然后给出了一个例程,自然例程是满足要求的,然而例程不仅满足了文档中的要求,还满足了一些额外的要求(当然这些要求只存在于老师脑子里)。如果不看例程(想来不喜欢看别人代码),直接就去实现的话,就会miss掉例程中的一些特性,只满足了文档中的特性。

比如这个在爬单个帖子的内容的时候,会开多个线程下载html,这是没有争议的。但是在接下来解析的时候是单线程解析还是多线程解析的时候就会出现分歧。我觉得因为GIL的存在,解析这种明显是运算密集型的工作单线程就好了,多线程反而会因为context-switch多多浪费时间。所以自己的作业里就是那么写的。然而老师觉得多线程下载,顺手就解析了被,所以例程里就是多线程解析。文档里又是另一种要求:只要求了多线程下载,至于解析则没有要求。

最后在提交代码的时候,这个问题就被老师提了出来,他说例程里是多线程解析,我说文档里没有要求。闹得不欢而散。

反观历经了半个学期的这个大作业(虽然从学到写完也就是一周多),最值得反思的问题就是沟通问题。甲方(暂且把老师叫做甲方)的要求不能实时向乙方(暂且把学生叫做乙方)推送;每沟通一次甲方就会多出一个要求,不能在一开始全部列清楚;都什么时代了还在用qq作为通信工具,同一个问题在QQ群里能说N多遍,且不说Linux下面没有qq,这种以时间为轴的讨论方式效率实在太低。

解决这些问题都很容易,比如搞一个maillist,有新信息直接全部发送,大家讨论的问题也都能看到;在项目开始时,仔细的写一个要求的文档,然后就不能再添加新的要求;使用团队协作工具,主题式的讨论等等都可以解决之前的问题。

只可惜许多事情不是做不好,只是人们都是懒癌发作,压根就不想好好做罢了。说来也是,又不给多发钱,又何必呢,呵呵。

duiniutanqin

说来说去估计也就是这种结果。想做好的人自然会做好,不想好好干的人怎么说都没用。