前言:对网络爬虫很感兴趣
——————————————————————————————————————————————
一、网络爬虫的工作原理
1.1等同于浏览器访问网页的工作原理。(详细情况见本文末尾博文链接)
(1)是一种真人的行为驱动
(2)通过浏览器来自动执行人为的动作,将动作自动程序化。
1.2网络爬虫就是将浏览器访问网页的过程,再次抽象成了程序。
二、网络爬虫的分类
2.1通过链接的访问层次先后来分:宽度优先和广度优先
宽度优先:在下载网页链接时,是一层一层的通过链接来爬取;
广度优先:就是先访问每层中第一个未访问的节点为先,依次迭代循环访问。
一般情况下,在爬虫开发中,采用宽度和广度混合式,避免了两者的弊端。
2.2按照爬虫的应用来分:通用型爬虫,垂直型爬虫
通用型爬虫:百度、谷歌爬虫,没有目标没有方向的爬取,是以链接为中心去爬,不限制站点的数据,数据存储直接为单个网页的文本,不进行格式化方面的抽取,一般只做正文、摘要、主题词等的抽取。主要方便索引和搜索。
垂直型爬虫:内容比较集中,例如:淘宝爬虫、微博爬虫、电商爬虫。数据一般直接转化为结构化的数据。
三、网络爬虫的一般做法
3.1基于Socket通信编写爬虫
是最底层的实现形式,也是执行最高效,但是开发效率较低的一种方式。socket并不是什么通信协议。只是为了方便tcp/ip层的上层访问而做的一层封装。
3.2HttpUTLConnection类编写爬虫
Java se的net包中的核心类,主要用于http的相关操作
3.3基于Apache的httpClient包编写爬虫
核心也是基于Java se的net包扩展而来,专为Java的网络通信编程而开发的第三方包。也是Apache。
3.4 基于phantomjs之类的无头(无界面)浏览器
(1)它是浏览器核心,并非浏览器。换言之,它是没有界面UI的浏览器。无头,即无界面。
(2)它提供的js api,它可以方便直接的被各种程序语言调用。
3.5 基于Selenium或是WebDriver之类的有头(有界面)浏览器
(1)它能直接操作本地的浏览器,与真人操作不同的是,它的操作都是程序触发,省去了人为操作的步骤。
四、系统设计
4.1 模块划分:提交任务的UI接口层、任务调度层、网络爬取层、数据解析层、数据持久化层
4.2 重难点:乱码解决、多线程设计、爬取的各参数的灵活配置、反爬代理
五、具体技术点
5.1 http协议相关+java se+httpclient+jsoup(httpparser)+database
5.2 http协议相关,指在爬虫过程中对最为主流的http网址的内容的抓包及参数分析,最为主要的参数部分要对http协议相对了解些,包括Url、HttpHeader、Get、Post、Cookie等4项。Url即为共认的Url网址。HttpHeader,指在http请求过程中,协带的各项header信息,如refer,host,encoding,返回的type等。 Get请求,即为在浏览器中看到的网址后边的参数部分,Post请求,即为数据提交的时候对数据保护和扩大数据提交量的一种数据的提交方式。Cookie,即为小甜饼,是服务器端向客户端写的信息,往往是为了提高客户端的使用体验而添加的,更关键的是要保持住客户端与服务器的连接状态。
5.3 Java Se:java基础,包括:高级对象使用,IO,多线程,网络通信,偶尔涉及到GUI编程。
5.4 HttpClient: 是开源的Apache的著名的java net编程第三方包,其实是对Java Net包的封状,目前已为4.3版本,更为精简易用,可以免去很多Http操作的细节操作,其核心为HttpUrlConnection的封装。
5.5 Jsoup:网页解析,是近来较受欢迎的html解析器,比htmlparser更简单、易用、高效,故目前应用jsoup的人员急速上升,且与老牌的htmlparser对比优势明显,尤其是其选择器的应用,太过强大,很有吸引用,使人不得选择jsoup去解析httpclient得到的网页内容。
5.6 database操作:关系型的mysql,sqlserver。非关系型:mongodb,ssdb,hbase,elasticsearch。
总结:浏览器访问网页的内部全部详细过程:http://blog.csdn.net/xiaotian15/article/details/8625302
网络爬虫相关知识的学习全部通过本校学长的录制视频和文档撰写来学习,在这里,感谢学长的奉献精神,我将持之以恒的的学习,扩大自己的知识面,报效祖国。嘿嘿!