需要做一个爬虫,最开始看到网上对larbin评价不错,就想着在它的基础上改改,结果后来发现我这个从来没在linux上做过开发的人,这么一下在上手效率是在太低。
想找个基于Windows的C或者C++的开源爬虫结果没发现有合适的。于是不得已只能转投C#阵营了,虽然不是很熟,但毕竟是微软的,比起直接转到java还是简单不少。
千辛万苦找到了NCrawler,发现相对于其他几个比如ArachNode.Net和OpenWebSpiderCS代码量还是要小很多,而且作者一直在开发,感觉不错,于是就决定使用它了。
因为NCrawler一个爬虫只爬一个域名下的网页,我需要爬很多个网站,于是就利用VS2010对并行计算的支持,对其爬虫进行了并行化,大大的提高了其爬行速度。
但是长时间跑下来,每天总要出两个错。一开始没有关闭VS2010的IntelliTrace,结果总是定不了错误的位置,直接导致IntelliTrace.exe崩溃。搞不明白怎么回事?为什么不停在出错的代码位置呢?
后来才发现IntelliTrace之后就可以定位错误了。第一个错误是在“远程主机强制关闭连接时”导致NCrawler用于解析robots文件的RobotRules.dll出错。找到RobotRules的源码加入工程后发现修改很麻烦,于是乎直接把robots文件解析部分给屏蔽了,先稳定了再做。
跑了一天之后又出问题了,这个我就更看不懂了……
output.Write(buffer, 0, bytesRead); 这句话竟然报错了,buffer长度为1024,bytesRead大小也是1024,不明白……
继续除错中!