Java爬虫高级教程-动力节点
作为网络爬虫的入门采用Java开发语言,内容涵盖了网络爬虫的原理以及开发逻辑,Java网络爬虫基础知识,网络抓包介绍,jsoup的介绍与使用,HttpClient的介绍与使用等内容。本课程在介绍网络爬虫基本原理的同时,注重具体的代码实现,加深读者对爬虫的理解,加强读者的实战能力。
网络爬虫技术最广泛的应用是在搜索引擎中,如百度、Google、Bing等,它完成了搜索过程中的最关键的步骤,即网页内容的抓取。下图为简单搜索引擎原理图。
Java基础学习:Java爬虫高级教程
网络爬虫的作用,我总结为以下几点:
舆情分析:企业或*利用爬取的数据,采用数据挖掘的相关方法,发掘用户讨论的内容、实行事件监测、舆情引导等。
企业的用户分析:企业利用网络爬虫,采集用户对其企业或商品的看法、观点以及态度,进而分析用户的需求、自身产品的优劣势、顾客抱怨等。
科研工作者的必备技术:现有很多研究都以网络大数据为基础,而采集网络大数据的必备技术便是网络爬虫。利用网络爬虫技术采集的数据可用于研究产品个性化推荐、文本挖掘、用户行为模式挖掘等。
网络爬虫涉及的领域包括:
Java基础学习:Java爬虫高级教程
网络爬虫的基本概念
网络爬虫(WebCrawler),又称为网络蜘蛛(WebSpider)或Web信息采集器,是一种按照一定规则,自动抓取或下载网络信息的计算机程序或自动化脚本,是目前搜索引擎的重要组成部分。
狭义上理解:利用标准的HTTP协议,根据网络超链接(如https://www.baidu.com/)和Web文档检索的方法(如深度优先)遍历万维网信息空间的软件程序。
功能上理解:确定待爬的URL队列,获取每个URL对应的网页内容(如HTML/JSON),解析网页内容,并存储对应的数据。
网络爬虫的分类
网络爬虫按照系统架构和实现技术,大致可以分为以下几种类型:通用网络爬虫(GeneralPurposeWebCrawler)、聚焦网络爬虫(FocusedWebCrawler)、增量式网络爬虫(IncrementalWebCrawler)、深层网络爬虫(DeepWebCrawler)。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
通用网络爬虫:爬行对象从一些种子URL扩充到整个Web,主要为门户站点搜索引擎和大型Web服务提供商采集数据。
通用网络爬虫的爬取范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求较低,通常采用并行工作方式,有较强的应用价值。
聚焦网络爬虫,又称为主题网络爬虫:是指选择性地爬行那些与预先定义好的主题相关的页面。
和通用爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,可以很好地满足一些特定人群对特定领域信息的需求。
增量网络爬虫:对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面,历史已经采集过的页面不重复采集。
增量网络爬虫避免了重复采集数据,可以减小时间和空间上的耗费。通常在设计网络爬虫时,需要在数据库中,加入时间戳,基于时间戳上的先后,判断程序是否继续执行。
DeepWeb爬虫:指大部分内容不能通过静态链接获取,只有用户提交一些表单信息才能获取的Web页面。例如,需要模拟登陆的网络爬虫便属于这类网络爬虫。另外,还有一些需要用户提交关键词才能获取的内容,如京东淘宝提交关键字、价格区间获取产品的相关信息。
网络爬虫的流程
网络爬虫基本流程可用下图描述:
Java基础学习:Java爬虫高级教程
具体流程为:
需求者选取一部分种子URL(或初始URL),将其放入待爬取的队列中。如在Java网络爬虫中,可以放入LinkedList或List中。
判断URL队列是否为空,如果为空则结束程序的执行,否则执行第三步骤。
从待爬取的URL队列中取出待爬的一个URL,获取URL对应的网页内容。在此步骤需要使用响应的状态码(如200,403等)判断是否获取数据,如响应成功则执行解析操作;如响应不成功,则将其重新放入待爬取队列(注意这里需要移除无效URL)。
针对已经响应成功后获取到的数据,执行页面解析操作。此步骤根据用户需求获取网页内容里的部分数据,如汽车论坛帖子的标题、发表的时间等。
针对3步骤已解析的数据,将其进行存储。
网络爬虫的爬行策略
一般的网络爬虫的爬行策略分为两种:深度优先搜索(Depth-FirstSearch)策略、广度优先搜索(Breadth-FirstSearch)策略。
深度优先搜索策略:从根节点的URL开始,根据优先级向下遍历该根节点对应的子节点。当访问到某一子节点URL时,以该子节点为入口,继续向下层遍历,直到没有新的子节点可以继续访问为止。接着使用回溯的方法,找到没有被访问到的节点,以类似的方式进行搜索。下图给出了理解深度优先搜索的一个简单案例:
Java基础学习:Java爬虫高级教程
广度优先搜索策略:也称为宽度优先,是另外一种非常有效的搜索技术,这种方法按照层进行遍历页面。下图可帮助理解广度优先搜索的遍历方式:
Java基础学习:Java爬虫高级教程
基于广度优先的爬虫是最简单的爬取网站页面的方法,也是目前使用较为广泛的方法。
学习建议
网络爬虫是入门某一门编程语言的实战技术:很多学习编程语言(如Java)的同学,采用的方式只看书或在网络上看一些Java****,而这将导致的后果就是面对一个具体项目时,不知道如何上手,尤其对新手而言。或者,一段时间后,就将之前的书本内容或视频内容遗忘了。
为此,我建议这些学习者可采用网络爬虫技术入门某一门编程语言。因为爬虫技术是个综合性很强的技术,涉及到编程语言的很多方面。小编特别选用了Java作为开发语言,将带大家深入了解Java网络爬虫背后的核心技术。学完该课程,相信您也已很好地入门Java编程语言。
对于零基础入门Java网络爬虫的同学,在学习过程中请注意以下几点:
理解爬虫的基本原理。
学习Java网络爬虫涉及的基础知识:基础不牢,地动山摇,学习和掌握网络爬虫的基础知识很重要。
吃透基本的爬虫代码,并在此基础上进行改写。
不断实战,发现爬虫中涉及的新问题,并解决问题。