① 我们在请求页面时,只是做了简单的异常处理。好的做法是根据http响应的状态码来做不同的处理。如对于请求重定向的url我们重新定向;对于找不到资源的url直接丢弃;对于连接超时的url我们可以重新将其放入未访问url队列中…
② 我们的待访问和已访问url都是直接保存在内存中的。当url数量很多时,可能会发生内存溢出。因此需要将数据持久化到硬盘上,但是又要节约空间,能够快速访问数据。
③ UrlQueue的enqueue和dequeue方法实际上是有问题的,当解析url速度慢于下载页面速度或其他原因引起的dequeue快于enqueue时,会导致程序提前终止。我们可以采用多线程,阻塞队列(BlockingQueue)来解决这一问题。
④ 我们目前的爬虫效率太低,仅爬取600个左右页面就花费了1分多钟。我们可以采用多线程,分布式爬取,来提高爬虫效率。
⑤ 爬虫的架构过于简单,扩展性,灵活性不强。
但不管怎样,我们的实现基本满足了文章开始提出的需求,以后会在此基础上慢慢进行迭代。在下一篇中我们会引入多线程来提高爬虫的效率;并采用Bloom Filter(布隆过滤器)来构建visited集合;引入Berkeley DB来进行url数据的持久化。