作为网络爬虫的入门采用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网络爬虫涉及的基础知识:基础不牢,地动山摇,学习和掌握网络爬虫的基础知识很重要。

吃透基本的爬虫代码,并在此基础上进行改写。

不断实战,发现爬虫中涉及的新问题,并解决问题。

Java爬虫高级教程-动力节点相关推荐

  1. Maven教程(动力节点老杨)(自己总结方便复习)

    Maven教程动力节点老杨 Maven官网:https://mvnrepository.com/?cf_chl_jschl_tk=13652735983642c9baa2d52e23df9b19591 ...

  2. java ztree_ztree简介_动力节点Java学院整理

    [简介] zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 zTree是一个依靠jQuery实现的多功能"树插件".优异的性能.灵活的配 ...

  3. Java SE 高级教程

    1.异常(Exception) 程序执行过程中发生中断,我们叫做异常,如果异常. 异常思维导图 1.1.异常的分类 异常分为检查性异常.运行时异常.和错误. 检查性异常:在编译时发生的异常. 运行时异 ...

  4. Java编程高级教程,这些数据库索引的高频面试题,你都掌握了多少

    HASH HASH即哈希索引,哈希索引多用于等值查询,时间复杂夫为o(1),效率非常高,但不支持排序.范围查询及模糊查询等. BTREE BTREE即B+树索引,INnoDB存储引擎默认的索引,支持排 ...

  5. java程序设计高级教程答案_Java高级程序设计实战教程答案

    [简答题]如何决定选用 HashMap 还是 TreeMap ? [单选题]下面说法不正确的是 ______ . [简答题]请简述类编写规范. [简答题]遍历一个 List 有哪些不同的方式? [填空 ...

  6. python爬虫高级教程,JS逆向之百度翻译

    环境 python版本号 系统 游览器 python 3.7.2 win7 google chrome 关于本文 本文将会通过爬虫的方式实现简单的百度翻译.本文中的代码只供学习,不允许作为于商务作用. ...

  7. [Java]Mybatis学习笔记(动力节点老杜)

    文章目录

  8. [Java]JavaWeb学习笔记(动力节点老杜2022)【Javaweb+MVC架构模式完结】

    文章目录

  9. java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)

    队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear). (3)当队列中 ...

  10. Spring动力节点老杜课程学习笔记

    没有Spring的时候我们如何进行开发的? 没有Spring为我们服务的,写代码一定是这样的 调用层: public static void main(String[] args) {//创建视图层对 ...

最新文章

  1. R语言message函数、warning()函数和stop()函数输出程序运行健康状态信息实战
  2. 【iOS与EV3混合机器人编程一系列五个】iOS_WiFi_EV3_Library 解剖连接EV3
  3. golang 指定范围 生成随机数
  4. python跟踪脚本进度(类似bash-x)
  5. 解决iOS地图持续定位耗电问题
  6. 网易2016年研发project师编程题(2)
  7. Mysql-my-innodb-heavy-4G.cnf配置文件注解
  8. XHTML 语法规则及 HTML/XHTML 文档类型说明(XHTML 1.0/XHTML 1.1 和 HTML 4.01/HTML 5)
  9. PHP--金额数字转换成英文
  10. Ubuntu系统安装向日葵
  11. Apache - 403错误
  12. BIP-39, BIP32/BIP-44
  13. css实现实心三角箭头,兼容ie
  14. 系统容量评估和性能保障
  15. Rockchip瑞芯微UART调试指南
  16. 长期有效的Google Adsense英文高单价关键词
  17. c++成员函数指针的本质
  18. 【金三银四】Java中间件面试题(2021最新版)
  19. c语言程序转python_使用f2py将C语言的函数转换为python模块
  20. 计算机组成原理之外围设备

热门文章

  1. JavaWeb图书管理系统.rar(毕业设计(论文)+毕业设计指导书+大学毕业设计任务书+图书管理系统+毕业论文答辩)
  2. 按一定条件筛选df1,返回结果中df1的索引取df2的数据
  3. ISO 7064:1983.MOD11-2校验码计算法(身份证18位效验码计算)
  4. 万网空间PHP 伪静态化,disuczx版块URL伪静态目录化设置方法
  5. Python语法基础
  6. 中级软件评测师考什么
  7. 找不到服务器 ip 地址,无法访问此网络 找不到服务器IP地址
  8. DB 管理的重要工具(数据字典)
  9. 【原创工具 | NetSM】开源跨平台命令行网速监测(纯 Python 开发)
  10. java的安装包下载 百度云_Java开发相关安装包网盘下载链接分享