网络爬虫全解析 技术 原理与实践pdf

2018年10月11日22:47:41 发表评论 494
摘要

适读人群 :本书适用于对开发信息采集软件感兴趣的自学者。也可以供有Java或程序设计基础的开发人员参考。
★相比用Python写网络爬虫,Java更有后发优势
★运行在服务器端的网络爬虫,更应该用Java开发
★本书结合作者多年网络爬虫开发经验
★全面系统讲解了网络爬虫相关技术并以Java实现
★通俗易懂、代码清晰、案例丰富实用
★一本书全面掌握网络爬虫开发

网络爬虫全解析 技术 原理与实践 内容简介

本书介绍了如何开发网络爬虫。内容主要包括开发网络爬虫所需要的Java语法基础和网络爬虫的工作原理,如何使用开源组件HttpClient和爬虫框架Crawler4j抓取网页信息,以及针对抓取到的文本进行有效信息的提取。为了扩展抓取能力,本书介绍了实现分?#38469;?#32593;络爬虫的关键技术。

本书介绍了如何开发网络爬虫。内容主要包括开发网络爬虫所需要的Java语法基础和网络爬虫的工作原理,如何使用开源组件HttpClient和爬虫框架Crawler4j抓取网页信息,以及针对抓另外,本书介绍了从图像和语音等多?#25945;?#26684;式文件中提取文本信息,以及如何使用大数据技术存储抓取到的信息。

最后,以实战为例,介绍了如何抓取微信和微博,以及在电商、医药、金融等领域的案例应用。其中,电商领域的应用介绍了使用网络爬虫抓取商品信息入库到网上商店的数据库表。医药领域的案例介绍了抓取PubMed医药论文库。金融领域的案例介绍了抓取股票信息,以及从年报PDF文档中提取表格等。本书适用于对开发信息采集软件感兴趣的自学者。也可以供有Java或程序设计基础的开发人员参考。

网络爬虫全解析 技术 原理与实践 目录

第1章 技术基础 1

1.1 第一个程序 1

1.2 准备开发环境 2

1.2.1 JDK 2

1.2.2 Eclipse 3

1.3 类和对象 4

1.4 常量 5

1.5 命名规范 6

1.6 基本语法 6

1.7 条件判断 7

1.8 循环 8

1.9 数组 9

1.10 位运算 11

1.11 枚举类型 13

1.12 比较器 14

1.13 方法 14

1.14 集合类 15

1.14.1 动态数组 15

1.14.2 散列表 15

1.15 文件 19

1.15.1 文本文件 19

1.15.2 二进制文件 23

1.16 多线程 27

1.16.1 基本的多线程 28

1.16.2 线程池 30

1.17 折半查找 31

1.18 处理图片 34

1.19 本章小结 35

第2章 网络爬虫入门 36

2.1 获取信息 36

2.1.1 提取链接 37

2.1.2 采集新闻 37

2.2 各种网络爬虫 38

2.2.1 信息采集器 40

2.2.2 广度优先遍历 41

2.2.3 分?#38469;?#29228;虫 42

2.3 爬虫相关协议 43

2.3.1 网站地图 44

2.3.2 Robots协议 45

2.4 爬虫架构 48

2.4.1 基本架构 48

2.4.2 分?#38469;?#29228;虫架构 51

2.4.3 垂直爬虫架构 54

2.5 自己写网络爬虫 55

2.6 URL地址查新 57

2.6.1 嵌入式数据库 58

2.6.2 布隆过滤器 60

2.6.3 实现布隆过滤器 61

2.7 部署爬虫 63

2.7.1 部署到Windows 64

2.7.2 部署到Linux 64

2.8 本章小结 65

第3章 定向采集 69

3.1 ?#30053;?#32593;页的基本方法 69

3.1.1 网卡 70

3.1.2 ?#30053;?#32593;页 70

3.2 HTTP基础 75

3.2.1 协议 75

3.2.2 URI 77

3.2.3 DNS 84

3.3 使用HttpClient?#30053;?#32593;页 84

3.3.1 HttpCore 94

3.3.2 状态码 98

3.3.3 创建 99

3.3.4 模拟浏览器 99

3.3.5 重试 100

3.3.6 抓取压缩的网页 102

3.3.7 HttpContext 104

3.3.8 ?#30053;?#20013;文网站 105

3.3.9 抓取需要登录的网页 106

3.3.10 代理 111

3.3.11 DNS缓存 112

3.3.12 并行?#30053;?113

3.4 ?#30053;?#32593;络?#35797;?115

3.4.1 重定向 115

3.4.2 解决套?#24188;?#36830;接限制 118

3.4.3 ?#30053;?#22270;片 119

3.4.4 抓取视频 122

3.4.5 抓取FTP 122

3.4.6 网页更新 122

3.4.7 抓取限制应对方法 126

3.4.8 URL地址提取 131

3.4.9 解析URL地址 134

3.4.10 归一化 135

3.4.11 增量采集 135

3.4.12 iframe 136

3.4.13 抓取JavaScript动态页面 137

3.4.14 抓取?#35789;?#20449;息 141

3.4.15 抓取暗网 141

3.5 PhantomJS 144

3.6 Selenium 145

3.7 信息过滤 146

3.7.1 匹配算法 147

3.7.2 分?#38469;?#36807;滤 153

3.8 采集新闻 153

3.8.1 网页过滤器 154

3.8.2 列表页 159

3.8.3 用机器学习的方法抓取新闻 160

3.8.4 自动查找目录页 161

3.8.5 详细页 162

3.8.6 增量采集 164

3.8.7 处理图片 164

3.9 遍历信息 164

3.10 并行抓取 165

3.10.1 多线程爬虫 165

3.10.2 垂直搜索的多线程爬虫 168

3.10.3 异步IO 172

3.11 分?#38469;?#29228;虫 176

3.11.1 JGroups 176

3.11.2 监控 179

3.12 增量抓取 180

3.13 管理界面 180

3.14 本章小结 181

第4章 数据存储 182

4.1 存储提取内容 182

4.1.1 SQLite 183

4.1.2 Access数据库 185

4.1.3 MySQL 186

4.1.4 写入维基 187

4.2 HBase 187

4.3 Web图 189

4.4 本章小结 193

第5章 信息提取 194

5.1 从文本提取信息 194

5.2 从HTML文件中提取文本 195

5.2.1 字符集编码 195

5.2.2 识别网页的编码 198

5.2.3 网页编码转换为字符串编码 201

5.2.4 使用正则表达?#25945;?#21462;数据 202

5.2.5 结构化信息提取 206

5.2.6 表格 209

5.2.7 网页的DOM结构 210

5.2.8 使用Jsoup提取信息 211

5.2.9 使用XPath提取信息 217

5.2.10 HTMLUnit提取数据 219

5.2.11 网页结构相似度计算 220

5.2.12 提取标题 222

5.2.13 提取?#25484;?224

5.2.14 提取模板 225

5.2.15 提取RDF信息 227

5.2.16 网页解析器原理 227

5.3 RSS 229

5.3.1 Jsoup解析RSS 230

5.3.2 ROME 231

5.3.3 抓取流程 231

5.4 网页去噪 233

5.4.1 NekoHTML 234

5.4.2 Jsoup 238

5.4.3 提取正文 240

5.5 从非HTML文件中提取文本 241

5.5.1 PDF文件 242

5.5.2 Word文件 245

5.5.3 Rtf文件 247

5.5.4 Excel文件 253

5.5.5 PowerPoint文件 254

5.6 提取标题 254

5.6.1 提取标题的一般方法 255

5.6.2 从PDF文件中提取标题 259

5.6.3 从Word文件中提取标题 261

5.6.4 从Rtf文件中提取标题 261

5.6.5 从Excel文件中提取标题 267

5.6.6 从PowerPoint文件中提取标题 270

5.7 图像的OCR识别 270

5.7.1 读入图像 271

5.7.2 准备训练集 272

5.7.3 图像二值化 274

5.7.4 切分图像 279

5.7.5 SVM分类 283

5.7.6 识别汉字 287

5.7.7 训练OCR 289

5.7.8 检测行 290

5.7.9 识别验证码 291

5.7.10 JavaOCR 292

5.8 提取地域信息 292

5.8.1 IP地址 293

5.8.2 手机 315

5.9 提取新闻 316

5.10 流?#25945;?#20869;容提取 317

5.10.1 音频流内容提取 317

5.10.2 视频流内容提取 321

5.11 内容纠错 322

5.11.1 模糊匹配问题 325

5.11.2 英文拼写检查 331

5.11.3 中文拼写检查 333

5.12 术语 336

5.13 本章小结 336

第6章 Crawler4j 338

6.1 使用Crawler4j 338

6.1.1 大众点评 339

6.1.2 日志 342

6.2 crawler4j原理 342

6.2.1 代码分析 343

6.2.2 使用Berkeley DB 344

6.2.3 缩短URL地址 347

6.2.4 网页编码 349

6.2.5 并发 349

6.3 本章小结 352

第7章 网页排重 353

7.1 语义指纹 354

7.2 SimHash 357

7.3 分?#38469;?#25991;档排重 367

7.4 本章小结 369

第8章 网页分类 370

8.1 关键词加权法 371

8.2 机器学习的分类方法 378

8.2.1 特征提取 380

8.2.2 朴素贝?#31471;?384

8.2.3 支持向量机 393

8.2.4 多级分类 401

8.2.5 网页分类 403

8.3 本章小结 403

第9章 案例分析 404

9.1 金融爬虫 404

9.1.1 中国能源政策数据 404

9.1.2 世界原油现货交易?#25512;?#36135;交易数据 405

9.1.3 股?#31508;?#25454; 405

9.1.4 从PDF文件中提取表格 408

9.2 商品搜索 408

9.2.1 遍历商品 410

9.2.2 使用HttpClient 415

9.2.3 提取价格 416

9.2.4 水印 419

9.2.5 数据导入ECShop 420

9.2.6 采集?#21592;?423

9.3 自动化行业采集 424

9.4 社会化信息采集 424

9.5 微博爬虫 424

9.6 微信爬虫 426

9.7 海关数据 426

9.8 医药数据 427

9.9 本章小结 429

后记 430

网络爬虫全解析 技术 原理与实践 精彩文摘

2.3 爬虫相关协议

相比于人,爬虫有更快的检索速?#32676;?#26356;深的层次,所以爬虫可能使一个站点瘫痪。

抓取网站?#20445;?#20026;了不影响用户正常访问该网站。爬虫需要有礼?#30149;?#20363;如,它不会不告而访,它会在自己的“user agent”中声称:“我是某某搜索引擎的爬虫。”

有些网站希望爬虫避免在白天对其网页进行抓取,从而不影响白天正常的对外公众服务,DNS服务提供商也不希望大量的域名解析工作量被搜索爬虫的域名请求所占用。为了避免抓取的网站响应请求的负担过重,爬虫需要遵循礼貌性原则,不要同时发起过多的?#30053;?#32593;页请求,这样才可能有更多的网站对爬虫友好。为了减少网站对爬虫的抱怨,建议每秒只抓取几次,把抓取任务尽?#31185;?#22343;分配到每个时间段,并?#20918;?#20813;高峰时段对访?#23454;?#32593;站负担过重。

2.3.1 网站地图

为了方便爬虫遍历和更新网站内容,网站可以设置Sitemap.xml。Sitemap.xml也就是网站地图,不过这个网站地图是用XML写的。例如,http://www.10010.com/Sitemap.xml。

在网站地图中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的?#24503;?#20197;及相对于网站上其他网址的重要程度等),以便搜索引擎抓取网站。

完整格式如下所?#23613;?/p>

XML标签的含义说明如?#38534;?/p>

l Loc:页面永久链接地址。

l Lastmod:页面最后修改时间。

l Changefreq:页面内容更新?#24503;省?/p>

l Priority:相对于其他页面的优?#28909;ā?/p>

2.3.2 Robots协议

作为一个爬虫程序,在网上应该遵守爬虫的“道德”。何谓爬虫的“道德?#20445;?#22240;为爬虫会访问网站,并?#30053;?#20854;中的?#35797;础?#23588;其是多线程爬虫,可能会在访问一个网站的时候开启多个线程,然后使用很多Session进行连接,爬取网页,很容?#33258;?#25104;网站瘫痪、不能访?#23454;群?#26524;。还有一种情况是网站有很多东西属于自己的“秘密?#20445;?#26412;身就不想让爬虫抓取,如果爬虫随意抓取,就相当于?#22336;?#32593;站的“隐?#20581;薄?/p>

为了避免这种情况的发生,互联网行业采用了两?#32844;?#27861;,第一?#36136;?#22312;网站的根目录下放置一个文件,起名为robots.txt,其中规定了?#30007;?#20869;容不想被抓取;另一?#36136;?#35774;置Robots Meta标签。

robots.txt文件必须放置在站点的根目录下,而且文件名必须小?#30784;?#35813;文件包含一条或更多的记录,这些记录用空行分开(以CR、CR/NL或者NL作为结束符),在该文件中可以用#进行注解,具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始,后面加上若干Disallow行,详细情况如?#38534;?/p>

l User-agent:该项的值用于描述搜索引擎robots的名字。在robots.txt文件中,如果有多条User-agent记录,说明有多个robots会受到该协议的限制,对该文件来说,至少要有一条User-agent记录。如果User-agent的值设为*,则该协议对任何机器人均有效,在robots.txt文件中,“User-agent:*”这样的记录只能有一条。

l Disallow:该项的值用于描述不希望?#29615;夢实?#30340;URL,这个URL可以是一条完整的路径,也可以是部分路径,任何以Disallow开头的URL均不会被robots访?#23454;健?/p>

任何一条Disallow记录为空,说明该网站的所有部分都?#24066;肀环?#38382;,在robots.txt文件中,至少要有一条Disallow记录。如果robots.txt是一个空文件,则该网站对于所有的搜索引擎Robots,都是开放的。一个robots.txt的例子如下所?#23613;?/p>

以上例子表明这个网站的Robots协议对每个爬虫都适用,并?#20063;輝市?#29228;取/cgi-bin/、/tmp/和/private/下的文件。

当一个爬虫访问一个站点?#20445;?#23427;会首先检查该站点根目录下是否存在robots.txt,如果存在,爬虫就会按照该文件中的内容来?#33539;?#35775;?#23454;?#33539;围;如果该文件不存在,所有的爬虫将能?#29615;?#38382;网站上所有没有被口令保护的页面。

在HttpClient包中,当执行get或者post方法?#20445;?#20250;默认提供对robots.txt的支持,不抓取Disallow规定的目录下的网页。?#27604;唬琀ttpClient?#37319;?#32622;了默认选项,可以让编写的爬虫不受 robots.txt协议的限制,但是,作为一个网络爬虫作者,我们?#25925;?#25552;倡有“道德”的抓取,以保障互联网行业健康发展。

现在我们讨论第二种方法,即通过设置Robots Meta的?#36947;?#38480;制爬虫的访问。这种方法是一种细粒度的方法,能?#35805;?#38480;制?#23500;?#21040;每个网页。?#25512;?#20182;的Meta标签(如使用的语言、页面的描述、关键?#23454;齲?#19968;样,Robots Meta标签也放在页面的<head></head>中,专门用来告诉搜索引擎Robots如何抓取该页的内容。

Robots Meta标签中没有大小写之分,name=“Robots”表示所有的搜索引擎,可以针对某个具体搜索引擎写为name=“BaiduSpider”。Content部分有4个指令选项:INDEX、NOINDEX、FOLLOW和NOFOLLOW,指令间以“,”分隔。

图书网:网络爬虫全解析 技术 原理与实践pdf

?#20439;试聰略?#20215;格为2图书币,请先
会员充值限时优惠:充30图书币送10图书币,每个会员仅一次优惠(此活动截止本月底)。
  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: