查看文章 |
爬虫研究了有一段时间,感觉要想设计出一个高效的爬虫,并非易事。而且,必须将爬虫设计过程中存在的每一个问题都熟悉,这是最基础的第一步,然后需要对这些问题的每一种现行解决方案进行试行,观察一下当前这种解决方式的基本思路。 只有在熟悉了一个爬虫工作过程中都会遇到哪些问题,对这些问题已存在解进行对比,才能继续设计工作。其实,如果到了开始设计爬虫的时候,基本上所有的问题都已经被发现,并已经都试图提出过解决的方案,否则,如果存在的问题并没有发现而且没有解决掉,在设计编码的过程中你会感觉到——磕磕绊绊。 这是我最大的感受了,往往因为一个问题的出现,导致你的精力不能集中在爬虫的编码设计中,或者,因为某些问题的存在导致现在的设计不合理,只能重新返工,你肯定会希望把爬虫设计的最好。所以,还是一点点地将分解的爬虫实现,然后通过重构将爬虫集成为一个能够正常工作的有机体。 下面,通过一种直观的方式来了解一个最基本的爬虫是怎样工作的。 我们可以通过现在的很多开源爬虫来了解。推荐一个最适合初学入门的爬虫,那就是使用Java实现的weblech,你可以从网上搜索下载它的,这个爬虫的设计并不是很好,但是对于入门的人来说,它是足够的简单使你能够很快地入门。 如果你以前听说过爬虫,也知道爬虫是用来下载网页数据为搜索引擎提供数据的工具,但是不知道爬虫运行起来会是什么样子,都做了哪些工作,你最好就是把weblech运行一下,然后把它的源代码读一下,深刻体会一下,你就会有“柳暗花明又一村”的感觉。 下面简单介绍一下这个爬虫: weblech共有3个包:weblech.spider、weblech.ui和weblech.util。weblech.spider包内是爬虫的核心实现代码,Spider类是我们启动后能够下载的爬虫,使用了Java线程技术;SpiderConfig类是一个爬虫配置类,通过解析Spider.properties属性配置文件,来配置一个爬虫;HTMLParser类是一个网页文件解析类,主要就是提取网页文件中的内容;URLGetter类是爬虫能够下载的核心实现,能够下载网页数据;DownloadQueue类是下载过程中使用的队列,因为每个爬虫线程启动后,需要获取到解析提取出来的URL后才能下载,爬虫线程就是从下载队列中获得URL资源的;URLToDownload类是封装一个待下载URL实体的类,然后将该实体类的实例加入到下载队列中,供爬虫线程执行出队获取待下载URL对象;URLObject类是用来封装下载并简单解析过的网页数据的一个实体类;DumbAuthenticator类是用来设置爬虫下载网站的认证信息的,包括用户名和密码。 根据该爬虫提供的配置说明,非常容易地就能运行起来,开始下载网页数据。 |

