大多数网络爬虫的开发原理与技巧在专业的公司内部都秘而不宣,至今仍然缺少理论与实践相结合的专门介绍网络爬虫的书籍。《自己动手写网络爬虫(修订版 配光盘)》尝试理论与实践相结合,深入透彻地讲解网络爬虫的原理并且辅以相关代码作为参考。
《自己动手写网络爬虫(修订版 配光盘)》介绍了网络爬虫开发中的关键问题与Java实现。主要包括从互联网获取信息与提取信息和对Web信息挖掘等内容。《自己动手写网络爬虫(修订版 配光盘)》在介绍基本原理的同时注重辅以具体代码实现来帮助读者加深理解,书中部分代码甚至可以直接使用。
《自己动手写网络爬虫(修订版 配光盘)》适用于有Java程序设计基础的开发人员。同时也可以作为计算机相关专业本科生或研究生的参考教程。
罗刚,计算机软件硕士,毕业于吉林工业大学。2005年创立北京盈智星科技发展有限公司,2008年联合创立上海数聚软件公司。猎兔搜索创始人,当前猎兔搜索在北京、上海以及石家庄均设有研发部。他带领猎兔搜索技术开发团队先后开发出猎兔中文分词系统、猎兔文本挖掘系统,智能垂直搜索系统以及网络信息监测系统等,实现互联网信息的采集、过滤、搜索和实时监测,其开发的搜索软件日用户访问量万次以上。
第1篇 自己动手抓取数据
第1章 全面剖析网络爬虫 3
1.1 抓取网页 4
1.1.1 深入理解URL 4
1.1.2 通过指定的URL抓取
网页内容 6
1.1.3 Java网页抓取示例 8
1.1.4 处理HTTP状态码 10
1.2 宽度优先爬虫和带偏好的爬虫 12
1.2.1 图的宽度优先遍历 12
1.2.2 宽度优先遍历互联网 13
1.2.3 Java宽度优先爬虫示例 15
1.2.4 带偏好的爬虫 22
1.2.5 Java带偏好的爬虫示例 23
1.3 设计爬虫队列 24
1.3.1 爬虫队列 24
1.3.2 使用Berkeley DB构建爬虫
队列 29
1.3.3 使用Berkeley DB 构建爬虫
队列示例 30
1.3.4 使用布隆过滤器构建
Visited表 36
1.3.5 详解Heritrix爬虫队列 39
1.4 设计爬虫架构 46
1.4.1 爬虫架构 46
1.4.2 设计并行爬虫架构 47
1.4.3 详解Heritrix爬虫架构 52
1.5 使用多线程技术提升爬虫性能 55
1.5.1 详解Java多线程 55
1.5.2 爬虫中的多线程 59
1.5.3 一个简单的多线程爬虫实现 60
1.5.4 详解Heritrix多线程结构 61
本章小结 64
第2章 分布式爬虫 69
2.1 设计分布式爬虫 70
2.1.1 分布式与云计算 70
2.1.2 分布式与云计算技术在
爬虫中的应用--浅析
Google的云计算架构 72
2.2 分布式存储 72
2.2.1 从Ralation_DB到key/value
存储 72
2.2.2 Consistent Hash算法 74
2.2.3 Consistent Hash代码实现 79
2.3 Google的成功之道--GFS 80
2.3.1 GFS详解 80
2.3.2 开源GFS--HDFS 84
2.4 Google网页存储秘诀--BigTable 88
2.4.1 详解BigTable 88
2.4.2 开源BigTable-HBase 93
2.5 Google的成功之道--
MapReduce算法 98
2.5.1 详解MapReduce算法 100
2.5.2 MapReduce容错处理 101
2.5.3 MapReduce实现架构 102
2.5.4 Hadoop中的MapReduce
简介 104
2.5.5 wordCount例子的实现 105
2.6 Nutch中的分布式 109
2.6.1 Nutch爬虫详解 109
2.6.2 Nutch中的分布式 116
本章小结 118
第3章 爬虫的"方方面面" 121
3.1 爬虫中的"黑洞" 122
3.2 主题爬虫和限定爬虫 122
3.2.1 理解主题爬虫 122
3.2.2 Java主题爬虫 128
3.2.3 理解限定爬虫 130
3.2.4 Java限定爬虫示例 136
3.3 有"道德"的爬虫 152
本章小结 156
第2篇 自己动手抽取Web内容
第4章 "处理"HTML页面 159
4.1 征服正则表达式 160
4.1.1 学习正则表达式 160
4.1.2 Java正则表达式 163
4.2 抽取HTML正文 169
4.2.1 了解Jsoup 169
4.2.2 使用正则表达式抽取示例 173
4.3 抽取正文 177
4.4 从JavaScript中抽取信息 193
4.4.1 JavaScript抽取方法 193
4.4.2 JavaScript抽取示例 195
本章小结 197
第5章 非HTML正文抽取 199
5.1 抽取PDF文件 200
5.1.1 学习PDFBox 200
5.1.2 使用PDFBox抽取示例 204
5.1.3 提取PDF文件标题 205
5.1.4 处理PDF格式的公文 206
5.2 抽取Office文档 211
5.2.1 学习POI 211
5.2.2 使用POI抽取Word示例 211
5.2.3 使用POI抽取PPT 示例 213
5.2.4 使用POI抽取Excel示例 214
5.3 抽取RTF 217
5.3.1 开源RTF文件解析器 217
5.3.2 实现一个RTF文件解析器 217
5.3.3 解析RTF示例 222
本章小结 227
第6章 多媒体抽取 229
6.1 视频抽取 230
6.1.1 抽取视频关键帧 230
6.1.2 Java视频处理框架 231
6.1.3 Java视频抽取示例 235
6.2 音频抽取 247
6.2.1 抽取音频 248
6.2.2 Java音频抽取技术 252
本章小结 254
第7章 去掉网页中的"噪声" 255
7.1 "噪声"对网页的影响 256
7.2 利用"统计学"消除"噪声" 257
7.2.1 网站风格树 260
7.2.2 "统计学去噪"的
Java实现 268
7.3 利用"视觉"消除"噪声" 272
7.3.1 "视觉"与"噪声" 272
7.3.2 "视觉去噪"的Java实现 273
本章小结 277
第3篇 自己动手挖掘Web数据
第8章 分析Web图 281
8.1 存储Web"图" 282
8.2 利用Web"图"分析链接 291
8.3 Google的秘密--PageRank 291
8.3.1 深入理解PageRank算法 291
8.3.2 PageRank算法的Java实现 295
8.3.3 应用PageRank进行链接
分析 298
8.4 PageRank 的兄弟HITS 299
8.4.1 深入理解HITS算法 299
8.4.2 HITS算法的Java实现 300
8.4.3 应用HITS进行链接分析 311
8.5 PageRank与HITS比较 312
本章小结 313
第9章 去掉"重复"的文档 315
9.1 何为"重复"的文档 316
9.2 利用"语义指纹"排重 316
9.2.1 理解"语义指纹" 318
9.2.2 "语义指纹"排重的
Java实现 319
9.3 SimHash排重 319
9.3.1 理解SimHash 320
9.3.2 SimHash排重的Java实现 321
9.4 分布式文档排重 328
本章小结 329
第10章 分类与聚类的应用 331
10.1 网页分类 332
10.1.1 收集语料库 332
10.1.2 选取网页的"特征" 333
10.1.3 使用支持向量机进行
网页分类 336
10.1.4 利用URL地址进行
网页分类 338
10.1.5 使用AdaBoost进行
网页分类 338
10.2 网页聚类 341
10.2.1 深入理解DBScan算法 341
10.2.2 使用DBScan算法聚类
实例 342
本章小结 344
第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等的"云"均拥有几十万台服务器。企业私有云一般拥有数百至上千台服务器。"云"能赋予用户前所未有的计算能力。
* 虚拟化。云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自"云",而不是固定的、有形的实体。应用在"云"中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
* 高可靠性。"云"使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
* 通用性。云计算不针对特定的应用,在"云"的支撑下可以构造出千变万化的应用,同一个"云"可以同时支撑不同的应用运行。
* 高可扩展性。"云"的规模可以动态伸缩,以满足应用和用户规模增长的需要。
* 按需服务。"云"是一个庞大的资源池,可以按需购买;云可以像自来水、电、煤气那样计费。
* 极其廉价。由于"云"的特殊容错措施可以采用极其廉价的节点来构成云,"云"的自动化集中式管理使得大量企业无需负担日益高昂的数据中心管理成本,"云"的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受"云"的低成本优势,通常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
……
前 言
当你在网上冲浪时,你是否知道还有一类特殊的网络用户也在互联网上默默地工作着,它们就是网络爬虫。这些网络爬虫按照设计者预定的方式,在网络中穿梭,同时自动收集有用的信息,进行分类和整理,将整理结果提供给用户,以方便用户查找他们感兴趣的内容。由于网络爬虫的实用性,引起了很多程序员,特别是Web程序员的兴趣。
但是大多数网络爬虫的开发原理与技巧在专业的公司内部都秘而不宣,至今仍然缺少理论与实践相结合的专门介绍网络爬虫的书籍。本书尝试理论与实践相结合,深入透彻地讲解网络爬虫的原理,并且辅以相关代码作为参考。本书相关的代码在附带光盘中可以找到。
本书的两位主要作者在搜索引擎领域都有丰富的理论和实践经验。同时,还有多个程序员帮忙开发或编写了代码实现,例如Java实现异步I/O或对PDF文件的处理等。由于作者的日常工作繁忙,做得不够的地方敬请谅解。
作者罗刚在参加编写本书之前,还合作撰写过《解密搜索引擎技术实战》一书,但存在讲解不够细致、知识点不够深入等问题。此次修订,对一些过时的内容进行了更新。
本书从基本的爬虫原理开始讲解,通过介绍优先级队列、宽度优先搜索等内容引领读者入门;之后根据当前风起云涌的云计算热潮,重点讲述了云计算的相关内容及其在爬虫中的应用,以及带偏好的爬虫、信息抽取、链接分析等内容;为了能够让读者更深入地了解爬虫,本书在最后两章还介绍了有关爬虫的数据挖掘等内容。
由于搜索引擎相关领域也正在快速发展中,而且由于篇幅的限制,有些不成熟的内容,没有能够在本书体现,例如有关"暗网"的内容。随着技术的不断发展,我们将在今后的版本中加入这些内容。
本书适合需要具体实现网络爬虫的程序员使用,对于信息检索等相关研究人员也有一定的参考价值,同时猎兔搜索技术团队也已经开发出以本书为基础的专门培训课程和商业软件。目前的一些网络爬虫软件仍然有很多功能有待实现,作者真诚地希望通过本书把读者带入网络爬虫开发的大门并认识更多的朋友。
感谢开源软件和我们的家人、关心我们的老师和朋友、创业伙伴以及选择猎兔搜索软件的客户多年来的支持。
编 者
作为一个对数据挖掘和信息分析颇感兴趣的人,我一直对网络爬虫技术心向往之。我曾尝试过阅读一些相关的技术文章和在线教程,但总感觉它们要么过于理论化,要么就只讲解了某个特定库的使用方法,缺乏一个完整的知识体系。这次看到《自己动手写网络爬虫(修订版 配光盘)》,我的第一感觉是:这本书可能真的能帮我打通任督二脉。书名中的“自己动手”非常关键,这意味着它应该是一个非常注重实践的书籍,而不是那种只会讲概念的“纸上谈兵”。我期待它能带领我从零开始,一步步构建自己的爬虫项目。我希望它能详细讲解如何选择合适的编程语言和开发环境,如何利用Python等语言以及Requests、BeautifulSoup、Scrapy等强大的库来高效地抓取网页数据。更重要的是,我希望书中能深入探讨在实际爬虫过程中会遇到的各种挑战,比如如何应对网站结构的改变,如何处理各种反爬虫机制(如验证码、IP封锁、JavaScript渲染等),以及如何保证爬虫的稳定性和效率。我之所以对“配光盘”特别留意,是因为我深信实践出真知,光盘中的配套代码示例和可能包含的练习项目,将是帮助我巩固所学知识、提升实操能力的绝佳辅助。我期望这本书能让我真正掌握网络爬虫的核心技能,并能将其应用于实际的数据分析和信息获取任务中。
评分我最近在考虑学习一门新的编程技术,来扩展我的技能树,也希望能解决一些工作中遇到的信息获取难题。网络爬虫这个方向一直吸引我,但网上信息太杂乱,很多教程都碎片化,缺乏系统性。偶然看到这本书《自己动手写网络爬虫(修订版 配光盘)》,感觉名字很直接,很接地气,似乎就是我需要的。“自己动手”这四个字,让我觉得这本书不会是那种理论说教型的,更倾向于指导读者亲自去实践。我希望这本书能从最基础的HTTP协议开始讲起,深入浅出地解释网页是如何被请求和响应的。然后,再逐步引入Python等编程语言,教授如何利用现有的库来解析HTML、XML等网页结构,并从中提取所需的数据。我特别希望书中能包含一些关于反爬虫技术的讲解,比如如何识别和应对JavaScript动态加载的内容,如何处理AJAX请求,以及如何应对IP限制和用户代理的伪装。当然,我也期望书中能提供一些关于Scrapy等框架的介绍,因为我知道这些框架对于构建更复杂的、可扩展的爬虫项目非常重要。光盘的配备让我非常欣喜,我猜想里面应该会有书中所有代码的示例,甚至是一些常用爬虫库的安装教程和配置指南。我希望这本书能让我真正理解爬虫的工作原理,并能独立写出符合自己需求的爬虫程序,而不是仅仅停留在复制粘贴的阶段。
评分我一直对如何从浩瀚的网络世界中提取有用的信息感到好奇,网络爬虫无疑是实现这一目标的关键技术。市面上关于爬虫的书籍不在少数,但很多都显得有些陈旧,或者讲解得过于晦涩难懂,让人难以入门。当我看到《自己动手写网络爬虫(修订版 配光盘)》这本书时,立刻被它的标题吸引住了。“自己动手”这四个字,暗示了这本书会非常注重实践操作,这正是我所需要的。我希望这本书能够以一种循序渐进的方式,带领我了解爬虫的基本原理,比如HTTP请求、HTML解析等。我期待它能教授我如何使用Python这样一种流行的编程语言,配合诸如BeautifulSoup、Scrapy等强大的库,来构建功能强大的爬虫。在实际应用中,反爬机制总是不可避免的,因此,我也非常希望这本书能够深入讲解如何应对这些挑战,例如如何处理JavaScript渲染的页面、如何绕过验证码、如何进行IP代理设置等等。我猜想光盘中会包含大量的源代码示例,这些代码经过修订和优化,可以直接应用于学习和实践,这对于我这种希望边学边练的读者来说,绝对是极大的帮助。我希望通过这本书,我能够真正掌握编写网络爬虫的能力,从而能够高效地获取我所需的数据,为我的学习或工作提供有力支持。
评分这本书的封面上赫然印着“自己动手写网络爬虫(修订版 配光盘)”,这几个字就像是为我量身定做的。我一直对网络世界充满了好奇,总想着能不能自己去挖掘那些隐藏在海量信息背后的宝藏。虽然之前看过一些关于爬虫的零散资料,但总是感觉不成体系,学习起来断断续续,总是在一些细节上卡壳。特别是到了实际操作层面,面对各种奇奇怪怪的网页结构、反爬机制,更是束手无策。这本书的出现,仿佛是为我指明了一条清晰的道路。封面上的“配光盘”三个字,更是让我眼前一亮,这通常意味着书中会有配套的代码示例,可以帮助我更快地理解和实践书中的理论知识,这对于我这种动手能力大于理论理解能力的学习者来说,简直是福音。我期待它能从最基础的概念讲起,循序渐进地引导我掌握爬虫的核心技术,而不是一上来就抛出复杂的代码。我想象中的这本书,应该会详细讲解如何分析网页结构、如何使用HTTP协议、如何处理各种数据格式(JSON、XML等),以及如何应对常见的反爬策略,比如验证码、IP封锁、JavaScript渲染等。我尤其希望它能提供一些真实世界的案例分析,让我看到爬虫是如何在实际应用中发挥作用的,例如数据采集、市场分析、信息监控等等。总而言之,我希望这本书能真正做到“自己动手”,让我从小白蜕变成一个能够独立构建网络爬虫的实践者。
评分说实话,我之前对编写网络爬虫这件事一直抱着一种“看热闹”的心态,总觉得那是少数技术大牛才能玩转的领域。但最近因为工作需要,开始接触到大量的数据分析和信息整合,我意识到掌握一定的爬虫技能,能够自动化地获取所需数据,将会极大地提高我的工作效率。我浏览了市面上不少关于爬虫的书籍,很多都过于理论化,要么就是代码堆砌,读起来晦涩难懂,让人望而却步。而这本书的名字“自己动手写网络爬虫”,以及“修订版”和“配光盘”的字样,让我觉得它可能更注重实践性和易懂性。我希望这本书能够像一位循循善诱的老师,从零开始,用最通俗易懂的语言解释爬虫的原理,一步步教我如何搭建开发环境,如何选择合适的编程语言和库(比如Python的requests、BeautifulSoup、Scrapy等)。我期待书中能包含丰富的代码示例,并且这些代码都经过了实际验证,能够直接运行,甚至可以直接复制代码粘贴到我的环境中进行修改和学习。我还希望它能深入讲解爬虫在实际应用中会遇到的各种挑战,比如如何处理动态加载的内容,如何绕过各种形式的验证码,如何避免被网站封禁IP,以及如何进行大规模数据采集时的性能优化。光盘的配置更是让我充满了期待,我设想里面会有书中的所有源代码、一些额外的练习题、甚至是一些精选的爬虫工具和资源链接,这样我就可以更加方便地进行学习和实践,而不是仅仅停留在理论层面。
评分书很好,有优惠真的爽。物流完美。
评分八错
评分书刚到,看起来好像很不喔,值得信赖,京东,到货快。
评分看起来费劲
评分适合自学,内容丰富
评分罗刚得书,还可以吧,就是算法什么的那块看不太懂
评分知道评论有京豆以后,我就复制了这段文字,评哪儿贴哪儿,很方便!一直喜欢在京东买东西,感觉京东还是挺好的,信任京东,希望越做越好!!
评分不太好,不建议买
评分书很好,有优惠真的爽。物流完美。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有