• 慕课网首页
  • 免费课
  • 实战课
  • 体系课
  • 慕课教程
  • 专栏
  • 手记
  • 猿问
收藏网站
使用 Ctrl+D 可将网站添加到书签

我的购物车

已加入门课程

购物车里空空如也

快去这里选购你中意的课程

实战课

体系课

我的订单中心
去购物车
  • 登录 / 注册
抱歉,未找到你想要查询的结果
全部开发者教程

Python 原生爬虫教程

爬虫基础
01 网络爬虫简介 02 网页基本构成和抓取原理 03 HTML 与 CSS 基础入门 04 HTTP 协议通信基原理 05 HTTP 的请求和响应 06 Python 环境安装 07 requests 第三方库 08 最简单的爬虫案例开发
爬虫进阶
09 使用 Xpath 进行爬虫开发 10 BeatifulSoup 的使用 11 使用正则表达式进行页面提取 12 MongoDB 数据库的简单使用和配置 13 Redis 的简单使用和配置 14 开发小案例-综合运用
高级知识
15 爬虫与反爬虫 16 数据可视化 17 数据清洗 18 使用 Pytesseract 进行简单的验证 19 第三方打码平台进行复杂验证码的识别
  • 前端开发

    JavaScript

    JavaScript 入门教程

    本教程带你从初级到高级全面掌握 Javascript 的使用方法

    TypeScript 入门教程

    这是一个很好的简单课程,只需2小时你就可以学习TypeScript基础知识。

    Vue 入门教程

    本教程带您从零开始学习 Vue 框架的使用,让您轻松应对 Vue 项目的开发。

    Ajax 入门教程

    本教程涵盖Ajax的实现原理,及Ajax封装,最后是框架实现方法。

    ES6-10 入门教程

    对比 ES5 进行学习 ES6+,理解 ES6+ 语法背后的思想

    Yarn 入门教程

    Yarn得相关基础知识和高级进阶

    ECharts 入门教程

    从零开始学习 ECharts ,掌握 ECharts 核心内容

    HTML & CSS

    CSS3 入门教程

    本课程从盒模型、文字、颜色、过渡、动画、布局、伪类等方面介绍 CSS3 的使用。

    雪碧图入门教程

    本文详细介绍了雪碧图的由来历史以及各种使用方式

    移动端布局教程

    由于移动互联网的兴起,移动端项目占据了很大一部分比重,本章将详细讲解几种常见布局

    Html5 入门教程

    最新一代的HTML标准,增加了许多实用的特性

    Sass 入门教程

    前端项目中 Sass 的快速入门教程

    HTML 入门教程

    从零讲解 HTML,掌握基础 HTML 知识内容

    canvas 入门教程

    本教程带你从初级到高级全面掌握canvas的使用方法

    uni-app 入门教程

    从零开始学习 uni-app 框架,轻松上手应用开发

  • 服务端相关

    服务器

    Nginx 入门教程

    本教程使您掌握 Nginx 安装、配置、核心模块的详解、实际使用的能力。

    HTTP 入门教程

    从协议原理开始到 Web 服务器以及 Web 安全一网打尽

    Docker 入门教程

    从 Docker 的基础概念开始,从实际问题入手带你学习 Docker

    Shell 入门教程

    本教程由浅入深,系统性的讲解Linux Shell脚本编程。

    Linux 入门教程

    本教程从安装 Linux 开始,囊括 Linux 基础命令操作以及进阶系统管理

    开发工具

    Gradle 入门教程

    本教程使您掌握实际使用gradle进行项目构建、测试、打包、发布的能力。

    Vim 编辑器教程

    课程主要讲解Vim的安装配置,四种模式、基本操作,以及包管理工具和寄存器等内容。

    RESTful 规范教程

    本教程从什么是 REST 开始带你领略 Web 开发中无处不在的规范

    Dreamweaver 教程

    DW 是一款同时具有网页制作和网页管理功能的网站开发工具,可以快速进行网站建设

    Markdown 入门教程

    本课程涵盖 Markdown 的基本及扩展语法。

    Maven 入门教程

    从最基础的安装 Maven 开始到 Maven 在开发中的实际应用

    Eclipse 编辑器教程

    本教程从Eclipse安装开始带你轻松掌握Eclipse常用开发技巧

    GitHub 入门教程

    本教程带你轻松掌握最实用的 GitHub 知识

    Android Studio 编辑器教程

    Android Studio 编程技巧一网打尽

    PyCharm 编辑器教程

    工作经常用到的 PyCharm 编辑器使用技巧一网打尽

    Sublime Text 使用教程

    花里胡哨展示sublime编辑器的各种功能

    Postman 教程

    Postman 由Google 开发用来做接口请求测试,前后端开发人员都可以使用

    Git入门教程

    从入门到精通。

    热门服务端语言

    C 语言入门教程

    本教程从语法基础、进阶知识等各方面详解 C 语言。

    Go 入门教程

    本教程从 Go 语言的基本语法掌握到进阶编程实践

    Kotlin 教程

    从 Kotlin 的基础语法到高级特性一网打尽

    Ruby 入门教程

    本教程从 Ruby 的各种对象开始学习到 Ruby 的实际使用

    ThinkPHP 入门教程

    本教程主要讲解 ThinkPHP 框架如何上手开发应用

  • Java

    基础应用

    Java 入门教程

    深入浅出讲解 Java 语言基础知识,带你入门 Java 语言

    Android 入门教程

    为你解析最实用的 Android 技术,让你平滑上手,顺利进阶,为开发保驾护航

    算法入门教程

    分析讲解常见算法的思想及使用

    数据结构入门教程

    通俗易懂的带你了解 Java 数据结构

    Lambda 表达式教程

    本教程展现了Lambda表达式的基础语法以及在程序中的应用

    Java 并发原理入门教程

    本教程为Java并发原理入门教程,在Java程序开发中占据着举足轻重的地位

    设计模式入门教程

    带你分析最常见的九个设计模式

    Java并发工具

    本课程简洁明了展示最基本的并发工具类相关概念及应用方法。

    JVM 入门教程

    JVM 入门教程,对JVM结构进行分模块讲解,简单易懂。

    RabbitMQ 入门教程

    超系统的RabbitMQ基础知识课程,你还在等什么?

    网络编程入门教程

    Java 网络编程核心要点详解

    后端通用面试教程

    带你系统梳理后端高频面试题,轻松丰富你的校招&社招阶段

    框架应用

    Spring Boot 入门教程

    循序渐进讲解 Spring Boot 企业级应用开发

    Spring 入门教程

    通俗易懂 渐进式讲解 Spring 企业级开发应用

    Hibernate 入门教程

    由浅入深讲解 Hibernate 企业级 JDBC 应用框架

    MyBatis 入门教程

    本教程整理出“百分之二十”的知识,帮你办到“百分之八十”事情

    Spring MVC 入门教程

    通俗易懂讲解 Spring MVC 框架应用

    Swagger 入门教程

    本课程以图文并茂的方式带你学习 Swagger 核心知识和应用剖析

    Zookeeper 入门教程

    由浅入深的 学习 ZooKeeper 的基本使用以及高级使用

    Netty 教程

    由浅入深的讲解 Netty 的核心知识体系,快速上手使用和理解 Netty

    Spring Security

    本课程涵盖了 Spring Security 框架的基本原理和集成方法

    微服务

    Spring Cloud Hystrix

    系统介绍 Hystrix 支持特性与实际应用场景实战

  • Python

    基础应用

    Python 入门语法教程

    本教程带你从 Python 的基础语法开始学习 Python。

    Python 原生爬虫教程

    本教程从爬虫基础知识到进阶技巧到实际应用。

    Python 进阶应用教程

    本教程涵盖 Python 的面向对象、标准库解析、异常处理直至最后的领域应用

    Python 算法入门教程

    用 Python 代码实现常用算法并汲取算法核心思想。

    进阶方向应用

    Django 入门教程

    从 Web 基础到 Django 框架的实际开发应用

    Flask 框架教程

    Flask 框架快速入门实现一个 TodoList 功能

    NumPy 入门教程

    本教程从基础的数据类型开始到 NumPy 的高级应用一网打尽

    Scrapy 入门教程

    从爬虫基础开始到使用 Scrapy 框架抓取各大网站数据

    TensorFlow 入门教程

    通过本教程对 TensorFlow 框架快速入门

    Python 办公自动化教程

    本教程带你使用Python快速操作Excel、Word、PPT,处理各种文件

    Pandas 入门教程

    本教程从基础的数据类型开始到 Pandas 的高级应用一-网打尽

  • 数据库

    MySQL

    MySQL 入门教程

    本教程主要讲解 MySQL 增删改查等基础操作

    SQL 入门教程

    本教程讲解使用 SQL 访问和处理数据系统中的数据的方法。

    MySQL 进阶教程

    那些你还不理解的 MySQL 高阶特性一网打尽

首页 慕课教程 Python 原生爬虫教程 Python 原生爬虫教程 01 网络爬虫简介
basil_2020 · 更新于 2020-03-26

02 网页基本构成和抓取原理

下一节

网络爬虫的基本概念和认知

图片描述

图片来源于网络

1. 爬虫的定义

网络爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。—— 百度百科定义 详细定义参照

慕课网注解: 爬虫其实是一种自动化信息采集程序或脚本,可以方便的帮助大家获得自己想要的特定信息。比如说,像百度,谷歌等搜索引擎,他们的背后重要的技术支撑就是爬虫。当我们使用搜索引擎搜索某一信息的时候,展现在我们眼前的搜索结果,就是爬虫程序事先从万维网里爬取下来的。我们之所以称之为爬虫,只不过是对自动获取万维网的动作的形象比喻而已。

2. 爬虫的流程架构

爬虫大致的工作流程如下图所示:首先获取数据,然后对数据进行清洗和处理,最后对数据进行持久化存储,以及后面的数据可视化工作。后面的章节中,我们会按照这个流程,详细的一一介绍。
图片描述

爬虫流程架构图

3. 爬虫的分类

爬虫按照系统结构和实现技术,大致可以分为以下几种类型:

3.1 通用网络爬虫(General Purpose Web Crawler)

通用爬虫,主要是指谷歌,百度等搜索引擎。它们爬取的范围广,种类多,存储的信息量大,对技术的要求比较高。

3.2 聚焦网络爬虫(Focused Web Crawler)

聚焦爬虫,主要是根据特定的主题进行爬取。这是大家最长使用的爬虫种类。比如,我们爬取金融类的,或者电影,图书之类的特定信息。由于我们限定了主题和网站,可以极大的节省我们的硬盘和网络资源,更好的满足特定业务的需求。

3.3 增量式网络爬虫(Incremental Web Crawle)

增量爬虫,主要是指我们在周期性的爬取一些网站的时候,只是仅仅爬取网站变更的内容,而不是把所有网站数据重新爬取一遍。这样,可以有效的降低运维成本。

3.4 深层网络爬虫(Deep Web Crawler)

深层网络爬虫,主要是指我们不能直接爬取的一些网站。比如,这些网站需要用户登陆,或者填写一些特定的表单,才能继续深入爬取信息。

Tips : 其实在实际的项目中,我们通常会将两种甚至多种爬虫技术相结合来使用,以达到更好的效果。

4. 爬虫的抓取策略

爬虫根据业务需求的不同可以大致分为两种不同的抓取策略:

4.1 深度优先策略

深度优先策略是指爬虫在爬取一个 HTML 页面的时候,如果发现页面中有新的 URL,将对这个新的 URL 进行深度优先搜索,以此类推,一直沿着 URL 进行爬取,直到不能深入为止。然后,返回到上一次的 URL 地址,寻找其他 URL 进行搜索,当页面中没有新的 URL 可以供选择的时候,说明搜索已经结束。

举一个简单的例子,比如,我们访问慕课网,假设慕课网首页只有两个课程链接,一个是爬虫课,另一个是 Python 课,深度优先算法就是先进入到爬虫课中,然后再进入到爬虫课的一个章节链接中,如果这个章节里没有了子章节,爬虫就会退到上一层,从另一个没有访问过的章节继续访问,所有章节都访问完了,爬虫会退回到首页,对 Python 课链接也执行相应的搜索,直到无法找到新的 URL 进行搜索而结束。

4.2 广度优先策略

广度优先策略是指爬虫需要爬取完整个 web 页面的所有 URL 后,才能继续到下一个的页面进行搜索,直到底层为止。

还是上面我们的慕课网的例子,来到慕课网首页之后我们需要获取到慕课网首页的 Python 课和爬虫课的URL 后,才能继续对这两个课的子章节的 URL 进行搜索,然后一层一层的进行下去,直到结束。

Tips:深度优先适合搜索网站嵌套比较深的网站,而广度优先策略更适用于对时间要求比较高,且网站页面同层次 URL 比较多的页面。

5. 爬虫的学习基础

学习爬虫,我们需要如下的基础知识:

  • Python 语言基础
  • 数据库基础知识

如果大家还没有 Python 语言或者数据库的基础,可以参考慕课网相关的 wiki 进行学习。

当然,为了方便大家理解,我会在代码中加入详细的注释,即使大家没有 Python 语言基础,也可以先理解大致流程,然后查漏补缺,学习相应的知识。

有些同学也许会疑惑,为什么开发爬虫一定要使用python语言呢,其他语言不可以吗?

这就不得不说 Python 的第三方的库了,Python 之所以那么流行,正式因为它有非常多的库,且这些库性能和使用都比较简洁高效,配合着 Python 语言本身的高效,仅仅需要 10 行代码左右就可实现一个简单的爬虫,而用 java/C/C++ 等其他语言,至少要写几十行代码,因此,使用 Python 开发爬虫程序赢得了众多程序员的青睐。

举个例子,比如,大家习惯了在楼下的便利店买饮料喝,虽然门口一公里外有更大的超市,我相信你也不愿意去买,因为太麻烦不够便利。这正是 Python 语言成为爬虫届的主流语言的精髓所在。

后面的学习中,我们会用到几个 Python 的第三方库,所谓第三方库,指的是相对于 Python 的官方库而言(例如,系统“os”,时间“time”等库\),由非官方发布的库,如 requests 等库,我们称之为第三方库。

Python 的官方库在安装 Python 解释器的时候已经默认安装好了,而第三方库需要我们去手动安装。例如我们在爬虫开发中会经常用到的 Requests 库。安装第三方库非常的简单,只需要在终端中执行下面这条命令即可:

pip install requests

后面,再讲到具体的库的时候,还会进行详细的介绍。

下面列举了一下爬虫开发中常用的 Python 的库的对比:

包 简介
urllib python自带的库,不需要安装。 但是,urlib 在不同的 python 版本中,存在明细的区别,在实际开发中,太过繁琐,而且无法对 header 伪装,容易被封掉,所以,现在使用的人数不是很多。
requests 与 urllib 相比,不仅具备了 url 的所用功能,更重要的的语法简洁优雅,而且,在兼容上, 完全兼容python2 和 python3,非常方便。 同时,它也可以对请求进行伪装。
urllib3 urllib3 库提供一些 urllib 没有的重要特性,比如说线程安全,连接池,支持压缩编码等。

这里推荐使用 requests 库,简单方便,上手容易,对于使用爬虫的新手来说,非常的合适。如果没有特殊说明,我们后面的课程默认使用 requests 库。

6. 爬虫的法律和道德问题

最近几年,因为编写爬虫程序大量抓取数据获利的程序员可以说是层出不穷。大家可能会担心自己在使用爬虫的过程中会不会违法。其实,大家只要合理的使用爬虫,是不会轻易触犯法律的。那么,怎样才算是合理使用爬虫呢,我总结了以下三点供大家参考:

  • 不能通过爬虫,高频率高并发的对特定网站进行攻击,导致目标网站崩溃;
  • 在爬取网站公共数据的时候,如果想把大数据用作商业用途,需要请专业的法务对网站的协议和声明进行分析确认后再使用;
  • 如果通过爬虫访问一些不是公开的资源数据,比如需要特定账号和密码登陆的网站,然后把数据公开出去,这些大部分都是违法的,即使是使用自己的账号密码登陆。

抛开法律层面,我们也要严于律己,遵守一些特定的规则办事。我这里想讲的就是爬虫界的 robots 协议。这个是网站所有者,针对爬虫而设计的协议,通常位于网站的根目录下面。它规定了哪些目录可以爬取,哪些不可以。我们需要遵守这项约定的协议,以避免造成不必要的麻烦。

7. 个人经验

在实际的工作项目中,如果我们是做爬虫工作的工程师,在熟练掌握基本的爬虫技术的同时,还应该去熟悉和了解数据清洗和处理技术,只有这样,我们才能更好的与团队进行协作。当然,这些技术,在后面的章节里,我也会一一跟大家进行介绍。

好了,让我们开启爬虫世界的欢乐旅途吧!

  • 划线
  • 写笔记
  • 复制

0/1000

 

下一节

02 网页基本构成和抓取原理

我要提出意见反馈
· 最近更新于 请填写更新时间
使用手机查看
最近更新
向你推荐
更多
索引目录
网络爬虫的基本概念和认知
1. 爬虫的定义
2. 爬虫的流程架构
3. 爬虫的分类
3.1 通用网络爬虫(General Purpose Web Crawler)
3.2 聚焦网络爬虫(Focused Web Crawler)
3.3 增量式网络爬虫(Incremental Web Crawle)
3.4 深层网络爬虫(Deep Web Crawler)
4. 爬虫的抓取策略
4.1 深度优先策略
4.2 广度优先策略
5. 爬虫的学习基础
6. 爬虫的法律和道德问题
7. 个人经验
意见反馈 收藏教程 标记书签
使用 Ctrl+D 可将网站添加到书签
  • 网站地图
  • 网站首页
  • 企业合作
  • 关于我们
  • 联系我们
  • 讲师招募
  • 帮助中心
  • 意见反馈
  • 慕课大学
  • 代码托管

Copyright© 2022 imooc.com All Rights Reserved | 京ICP备 12003892号-11 京公网安备11010802030151号

意见反馈 常见问题 APP下载
官方微信
返回顶部