本书介绍了网络爬虫开发中的关键问题与Java实现。主要包括从互联网获取信息与提取信息和对Web信息挖掘等内容。本书在介绍基本原理的同时注重辅以具体代码实现来帮助读者加深理解,书中部分代码甚至可以直接使用。
本书适用于有Java程序设计基础的开发人员。同时也可以作为计算机相关专业本科生或研究生的参考教程。
大多数网络爬虫的开发原理与技巧在专业的公司内部都秘而不宣,至今仍然缺少理论与实践相结合的专门介绍网络爬虫的书籍。本书尝试理论与实践相结合,深入透彻地讲解网络爬虫的原理并且辅以相关代码作为参考。
罗刚,计算机软件硕士,毕业于吉林工业大学。2005年创立北京盈智星科技发展有限公司,2008年联合创立上海数聚软件公司。猎兔搜索创始人,当前猎兔搜索在北京、上海以及石家庄均设有研发部。他带领猎兔搜索技术开发团队先后开发出猎兔中文分词系统、猎兔文本挖掘系统,智能垂直搜索系统以及网络信息监测系统等,实现互联网信息的采集、过滤、搜索和实时监测,其开发的搜索软件日用户访问量万次以上。
第2章 分布式爬虫
随着互联网技术的发展以及风起云涌的云计算浪潮,爬虫技术也逐渐向分布式方向发展。比如,Google的爬虫就是使用成千上万台小型机和微机进行合作,完成分布式抓取工作的。分布式技术不仅可以解决IT运营的成本,还可以解决爬虫效率问题,尤其是当今云计算的热潮,更把分布式推向了极致。
2.1 设计分布式爬虫
把抓取任务分布到不同的节点主要是为了抓取性能与可扩展性,也可以使用物理分布的爬虫系统,让每个爬虫节点抓取靠近它的网站。例如,北京的爬虫节点抓取北京的网站,上海的爬虫节点抓取上海的网站,电信网络中的爬虫节点抓取托管在电信的网站,联通网络中的爬虫节点抓取托管在联通的网站。
此外,还需要考虑容错。如果一个节点X崩溃(或优雅地离开),我们可以通过查找任务缓存,知道分配给它哪些任务。这次X的任务要由其他的节点来重新执行。
2.1.1 分布式与云计算
分布式技术是一种基于网络的计算机处理技术,与集中式相对应。近些年来,由于个人计算机的性能得到极大的提高及其使用的普及,使得将处理任务分布到网络上的所有计算机成为可能。分布式计算是和集中式计算相对立的概念,分布式计算的数据可以分布在很大区域去完成。
在分布式网络中,数据的存储和处理都是在本地工作站进行的。数据输出可以打印,也可以保存在软盘上。通过网络能够更快、更便捷地访问数据。因为每台计算机都能够存储和处理数据,所以不要求服务器的功能十分强大,其价格也就不必过于昂贵。这种类型的网络可以适应用户的各种需要,同时允许他们共享网络的数据、资源和服务。在分布式网络中使用的计算机既能够作为独立的系统使用,也可以把它们连接在一起获得更强大的网络功能。
分布式计算的优点是可以快速访问、多用户使用。每台计算机可以访问系统内其他计算机的信息文件,系统设计上具有更大的灵活性。既可为独立计算机的地区用户的特殊需求服务,也可为联网的企业需求服务,实现系统内不同计算机之间的通信,每台计算机都可以拥有和保持所需要的最大数据和文件,减少了数据传输的成本和风险。为分散地区和中心办公室双方提供更迅速的信息通信和处理方式,为每个分散的数据库提供作用域,数据存储于许多存储单元中,但任何用户都可以进行全局访问,使故障的不利影响最小化,以较低的成本来满足企业的特定要求。
云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。
云计算的基本原理是,通过使计算任务分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用上,从而根据需求访问计算机和存储系统。
这可是一种革命性的举措,打个比方,就好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,使用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
云计算的蓝图已经呼之欲出:在未来,只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。从这个角度而言,最终用户才是云计算的真正拥有者。
云计算的应用包含这样一种思想,把力量联合起来,给其中的每一个成员使用。
目前,PC依然是我们日常工作生活中的核心工具--我们用PC处理文档、存储资料,用电子邮件或U盘与他人分享信息。如果PC硬盘坏了,我们会因为资料丢失而束手无策。
而在云计算时代,"云"会替我们做存储和计算的工作。"云"就是计算机群,每一群都包括几十万台,甚至上百万台计算机。"云"的好处还在于,其中的计算机可以随时更新,保证"云"长生不老。Google就有好几个这样的"云",其他IT巨头,如微软、雅虎、亚马逊(Amazon)也有或正在建设这样的"云"。
届时,我们只需要一台能上网的电脑,不需关心存储或计算发生在哪朵"云"上,一旦有需要,我们可以在任何地点用任何设备,如电脑、手机等,快速地计算和找到这些资料。我们再也不用担心资料会丢失了。
云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等概念混合演进并跃升的结果。云计算的特点如下:
* 超大规模。Google云计算已经拥有100多万台服务器,Amazon、IBM、微软、Yahoo等的"云"均拥有几十万台服务器。企业私有云一般拥有数百至上千台服务器。"云"能赋予用户前所未有的计算能力。
* 虚拟化。云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自"云",而不是固定的、有形的实体。应用在"云"中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
* 高可靠性。"云"使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
* 通用性。云计算不针对特定的应用,在"云"的支撑下可以构造出千变万化的应用,同一个"云"可以同时支撑不同的应用运行。
* 高可扩展性。"云"的规模可以动态伸缩,以满足应用和用户规模增长的需要。
* 按需服务。"云"是一个庞大的资源池,可以按需购买;云可以像自来水、电、煤气那样计费。
* 极其廉价。由于"云"的特殊容错措施可以采用极其廉价的节点来构成云,"云"的自动化集中式管理使得大量企业无需负担日益高昂的数据中心管理成本,"云"的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受"云"的低成本优势,通常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
……