网络爬虫编写教材
《自己动手写网络爬虫》是2010年10月由清华大学出版社出版的图书,主要包括从互联网获取信息与提取信息和对Web信息挖掘等内容,本书适用于有Java程序设计基础的开发人员。同时也可以作为计算机相关专业本科生或研究生的参考教材

课程重点爬虫所需的计算机网络/前端/正则//xpath/CSS选择器等基础知识一网打尽
2.实现静态网页,动态网页两大主流网页类型数据抓取
3.模拟登陆、应对反爬、识别验证码等难点详细讲解
4.多线程,多进程等工作常见应用场景难题讲解
书籍内容图片预览








作品目录介绍第1章 全面剖析网络爬虫 3
1.1 抓取网页
| 1.3.3 使用berkeley db构建爬虫队列示例
|
1.1.1 深入理解url
| 1.3.4 使用布隆过滤器构建visited表
|
1.1.2 通过指定的url抓取网页内容
| 1.3.5 详解heritrix爬虫队列
|
1.1.3 java网页抓取示例
| 1.4 设计爬虫架构 .
|
1.1.4 处理http状态码
| 1.4.1 爬虫架构
|
1.2 宽度优先爬虫和带偏好的爬虫
| 1.4.2 设计并行爬虫架构
|
1.2.1 图的宽度优先遍历
| 1.4.3 详解heritrix爬虫架构
|
1.2.2 宽度优先遍历互联网
| 1.5 使用多线程技术提升爬虫性能
|
1.2.3 java宽度优先爬虫示例
| 1.5.1 详解java多线程
|
1.2.4 带偏好的爬虫
| 1.5.2 爬虫中的多线程
|
1.2.5 java带偏好的爬虫示例
| 1.5.3 一个简单的多线程爬虫实现
|
1.3 设计爬虫队列
| 1.5.4 详解heritrix多线程结构
|
1.3.1 爬虫队列
| 1.6 本章小结
|
1.3.2 使用berkeley db构建爬虫队列
|
|
第2章 分布式爬虫 69
2.1 设计分布式爬虫
| 2.4.2 开源bigtable——hbase
|
2.1.1 分布式与云计算
| 2.5 google的成功之道——mapreduce算法
|
2.1.2 分布式与云计算技术在爬虫中的应用——浅析google的云计算架构
| 2.5.1 详解mapreduce算法
|
2.2 分布式存储
| 2.5.2 mapreduce容错处理
|
2.2.1 从ralation_db到key/value存储
| 2.5.3 mapreduce实现架构
|
2.2.2 consistent hash算法
| 2.5.4 hadoop中的mapreduce简介
|
2.2.3 consistent hash代码实现
| 2.5.5 wordcount例子的实现
|
2.3 google的成功之道——gfs
| 2.6 nutch中的分布式
|
2.3.1 gfs详解
| 2.6.1 nutch爬虫详解
|
2.3.2 开源gfs——hdfs
| 2.6.2 nutch中的分布式
|
2.4 google网页存储秘诀——bigtable
| 2.7 本章小结
|
2.4.1 详解bigtable
|
|
第3章 爬虫的“方方面面”121
3.1 爬虫中的“黑洞”
| 3.2.3 理解限定爬虫
|
3.2 限定爬虫和主题爬虫
| 3.2.4 java限定爬虫示例
|
3.2.1 理解主题爬虫
| 3.3 有“道德”的爬虫
|
3.2.2 java主题爬虫
| 3.4 本章小结
|
第4章 “处理”html页面 159
4.1 征服正则表达式
| 4.3 抽取正文
|
4.1.1 学习正则表达式
| 4.4 从javascript中抽取信息
|
4.1.2 java正则表达式
| 4.4.1 javascript抽取方法
|
4.2 抽取html正文
| 4.4.2 javascript抽取示例
|
4.2.1 了解htmlparser
| 4.5本章小结
|
4.2.2 使用正则表达式抽取示例
|
|
第5章 非html正文抽取 201
5.1 抽取pdf文件
| 5.2.2 使用poi抽取word示例
|
5.1.1 学习pdfbox
| 5.2.3 使用poi抽取ppt示例
|
5.1.2 使用pdfbox抽取示例
| 5.2.4 使用poi抽取excel示例
|
5.1.3 提取pdf文件标题
| 5.3 抽取rtf 5.3.1 开源rtf文件解析器
|
5.1.4 处理pdf格式的公文
| 5.3.2 实现一个rtf文件解析器
|
5.2 抽取office文档
| 5.3.3 解析rtf示例
|
5.2.1 学习poi
| 5.4 本章小结
|
第6章 多媒体抽取 231
6.1 抽取视频
| 6.2 音频抽取
|
6.1.1 抽取视频关键帧
| 6.2.1 抽取音频
|
6.1.2 java视频处理框架
| 6.2.2 学习java音频抽取技术
|
6.1.3 java视频抽取示例
| 6.3 本章小结
|
第7章去掉网页中的“噪声” 257
7.1 “噪声”对网页的影响
| 7.3 利用“视觉”消除“噪声”
|
7.2 利用“统计学”消除“噪声”
| 7.3.1 “视觉”与“噪声”
|
7.2.1 网站风格树
| 7.3.2 “视觉去噪”java实现
|
7.2.2“统计学去噪”java实现
| 7.4 本章小结
|
第8章 分析web图 283
8.1 存储web“图”
| 8.4 pagerank的兄弟hits
|
8.2 利用web“图”分析链接
| 8.4.1 深入理解hits算法
|
8.3 google的秘密——pagerank
| 8.4.2 hits算法的java实现
|
8.3.1 深入理解pagerank算法
| 8.4.3 应用hits进行链接分析
|
8.3.2 pagerank算法的java实现
| 8.5 pagerank与hits的比较
|
8.3.3 应用pagerank进行链接分析
| 8.6 本章小结
|
第9章 去掉重复的“文档” 317
9.1 何为“重复”的文档
| 9.4 simhash排重
|
9.2 去除“重复”文档——排重
| 9.4.1 理解simhash
|
9.3 利用“语义指纹”排重
| 9.4.2 simhash排重的java实现
|
9.3.1 理解“语义指纹”
| 9.5 分布式文档排重
|
9.3.2 “语义指纹”排重的java实现
| 9.6 本章小结
|
第10章 分类与聚类的应用 333
10.1 网页分类 10.1.1 收集语料库
| 10.2 网页聚类
|
10.1.2 选取网页的“特征”
| 10.2.1 深入理解dbscan算法
|
10.1.3 使用支持向量机进行网页分类
| 10.2.2 使用dbscan算法聚类实例
|
10.1.4 利用url地址进行网页分类
| 10.3 本章小结
|
10.1.5 使用adaboost进行网页分类
|
|
网络爬虫到底是什么简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。
你可以简单地想象:每个爬虫都是你的「分身」。就像孙悟空拔了一撮汗毛,吹出一堆猴子一样。
你每天使用的百度,其实就是利用了这种爬虫技术:每天放出无数爬虫到各个网站,把他们的信息抓回来,然后化好淡妆排着小队等你来检索。
抢票软件,就相当于撒出去无数个分身,每一个分身都帮助你不断刷新 12306 网站的火车余票。一旦发现有票,就马上拍下来,然后对你喊:土豪快来付款。
那么,像这样的爬虫技术一旦被用来作恶有多可怕呢?
正好在上周末,一位黑客盆友御风神秘兮兮地给我发来一份《中国爬虫图鉴》,这哥们在腾讯云鼎实验室主要负责加班,顺便和同事们开发了很多黑科技。比如他们搞了一个威胁情报系统,号称能探测到全世界的「爬虫」都在做什么。
我吹着口哨打开《图鉴》,但一分钟以后,我整个人都不好了。
我看到了另一个「平行世界」:
就在我们身边的网络上,已经密密麻麻爬满了各种网络爬虫,它们善恶不同,各怀心思。而越是每个人切身利益所在的地方,就越是爬满了爬虫。
看到最后,我发现这哪里是《中国爬虫图鉴》,这分明是一份《中国焦虑图鉴》。
我们今天要说的,就和这些 App 有关。
一、爬虫的「骚操作」
爬虫也分善恶。
像谷歌这样的搜索引擎爬虫,每隔几天对全网的网页扫一遍,供大家查阅,各个被扫的网站大都很开心。这种就被定义为「善意爬虫」。
但是,像抢票软件这样的爬虫,对着 12306 每秒钟恨不得撸几万次。铁总并不觉得很开心。这种就被定义为「恶意爬虫」。(注意,抢票的你觉得开心没用,被扫描的网站觉得不开心,它就是恶意的。)
给你看一张图:
这张图里显示的,就是各行各业被爬「叨扰」的比例。(注意,这张图显示是全世界,不是全中国。)而每一个色块背后,都是一条真实而强大的利益链条。
接下来,中哥就给你科普一下里面的骚操作。
1、排名第一的是出行
出行行业中爬虫的占比最高(20.87%)。在出行的爬虫中,有 89.02% 的流量都是冲着 12306 去的。这不意外,全中国卖火车票的独此一家别无分号。
你还记得当年 12306 上线王珞丹和白百何的「史上最坑图片验证码」么?
这些东西不是为了故意难为老老实实卖票的人的,而恰恰是为了阻止爬虫(也就是抢票软件)的点击。刚才说了,爬虫只会简单地机械点击,它不认识白百何,所以很大一部分爬虫就被挡在了门外。
你可能会说,不对啊,我现在还可以用抢票软件抢到票啊。
没错。抢票软件也不是吃素的。它们在和铁总搞「对抗」。
有一种东西叫作「打码平台」,你可以了解一下。
打码平台雇用了很多叔叔阿姨,他们在电脑屏幕前不做别的事情,专门帮人识别验证码。那边抢票软件遇到了验证码,系统就会自动把这些验证码传到叔叔阿姨面前,他们手工选好哪个是白百何哪个是王珞丹,然后再把结果传回去。总共的过程用不了几秒时间。
当然,这样的打码平台还有记忆功能。如果叔叔阿姨已经标记了这张图是「锅铲」,那么下次这张图片再出现的时候,系统就直接判断它是「锅铲」。时间一长,12306 系统里的图片就被标记完了,机器自己都能认识,叔叔阿姨都可以坐在一边斗地主了。
你可能会问:为什么 12306 这么抠呢?它大方地让爬虫随意爬会死吗?
答:会死。
你知道每年过年之前,12306 被点成什么样了吗?公开数据是这么说的:「最高峰时 1 天内页面浏览量达 813.4 亿次,1 小时最高点击量 59.3 亿次,平均每秒 164.8 万次。」这还是加上验证码防护之后的数据。可想而知被拦截在外面的爬虫还有多少。
况且这里还没有讨论,被抢票软件把票抢走,对我们父母那样的不会抢票的人来说,是不是公平呢?
铁路被爬虫「点击」成这样已经够惨了,但它还有个难兄难弟,就是航空。
而航空里,被搞得最惨的不是国航,不是海航,也不是东航。而是亚航。
航空类爬虫的分布比例。
很多人可能都没坐过亚洲航空。这是一家马来西亚的廉价航空公司,航线基本都是从中国各地飞往东南亚的旅游胜地,飞机上连矿泉水都得自费买,是屌丝穷 X 度假之首选。
为什么爬虫这么青睐亚航呢?因为它便宜。确切地说,因为它经常放出便宜的票。
本来,亚航的初衷只是随机放出一些便宜的票来吸引游客,但这里面黄牛党是有利可图的。
据我所知,他们是这样玩的:
技术宅黄牛党们利用爬虫,不断刷新亚航的票务接口,一旦出现便宜的票,不管三七二十一先拍下来再说。
亚航有规定,你拍下来半小时(具体时间记不清了)不付款票就自动回到票池,继续卖。但是黄牛党们在爬虫脚本里写好了精确的时间,到了半小时,一毫秒都不多,他又把票拍下来,如此循环。直到有人从黄牛党这里定了这个票,黄牛党就接着利用程序,在亚航系统里放弃这张票,然后 0.00001 秒之后,就帮你用你的名字预定了这张票。
「我是中间商,我就要赚差价!」这波骚操作,堪称完美。
2、排名第二的是社交
社交的爬虫重灾区,就是你们喜闻乐见的微博。
给你看张图:
这是爬虫经常光顾的微博地址。
这里的代码其实指向了微博的一个接口。它可以用来获取某个人的微博列表、微博的状态、索引等等等等。
获得这些,能搞出什么骚操作呢?
你想想看,如果我能随心所欲地指挥一帮机器人,打开某人的微博,然后刷到某一条,然后疯狂关注、点赞或者留言,这不就是标准的僵尸粉上班儿的流程么。。。
其实,僵尸粉都只是爬虫的常规操作,更骚的来了,你都想不到还能这么操作,而且分分钟躺着赚钱: