主页 > 网赚优化 > 从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

 

在这个大数据时代,尤其是人工智能浪潮兴起的时代,不论是工程领域还是研究领域,数据已经成为必不可少的一部分,而数据的获取很大程度上依赖于爬虫的爬取,所以爬虫变得越来越火爆。

什么是爬虫?

我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了。

怎么学爬虫?

在学习写爬虫之前,我们需要了解一些基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 的基本原理等。本文,我们就对这些基础知识做一个简单的总结。

HTTP 基本原理

在本节中,我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容,有助于我们进一步了解爬虫的基本原理。

一、URI 和 URL

这里我们先了解一下 URI 和 URL,URI 的全称为 Uniform Resource Identifier,即统一资源标志符,URL 的全称为 Universal Resource Locator,即统一资源定位符。

举例来说,https://github.com/favicon.ico 是 GitHub 的网站图标链接,它是一个 URL,也是一个URI。即有这样的一个图标资源,我们用 URL/URI 来唯一指定了它的访问方式,这其中包括了访问协议 https、访问路径(/即根目录)和资源名称 favicon.ico。通过这样一个链接,我们便可以从互联网上找到这个资源,这就是 URL/URI。

URL 是 URI 的子集,也就是说每个 URL 都是 URI,但不是每个 URI 都是 URL。那么,怎样的URI 不是 URL 呢?URI 还包括一个子类叫作 URN,它的全称为 Universal Resource Name,即统一资源名称。URN 只命名资源而不指定如何定位资源,比如 urn:isbn:0451450523 指定了一本书的 ISBN,可以唯一标识这本书,但是没有指定到哪里定位这本书,这就是 URN。URL、URN 和 URI 的关系可以用图 1 表示。

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

图1 URL、URN 和URI 关系图

但是在目前的互联网中,URN 用得非常少,所以几乎所有的 URI 都是 URL,一般的网页链接我们既可以称为 URL,也可以称为 URI,我个人习惯称为 URL。

二、超文本

接下来,我们再了解一个概念——超文本,其英文名称叫作 hypertext,我们在浏览器里看到的网页就是超文本解析而成的,其网页源代码是一系列 HTML 代码,里面包含了一系列标签,比如 img 显示图片,p 指定显示段落等。浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码 HTML 就可以称作超文本。

例如,我们在 Chrome 浏览器里面打开任意一个页面,如淘宝首页,右击任一地方并选择“检查”项(或者直接按快捷键 F12),即可打开浏览器的开发者工具,这时在 Elements 选项卡即可看到当前网页的源代码,这些源代码都是超文本,如图 2 所示。

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

图2 源代码

三、HTTP 和HTTPS

在淘宝的首页https://www.taobao.com/中,URL 的开头会有http 或https,这就是访问资源需要的协议类型。有时,我们还会看到ftp、sftp、smb 开头的URL,它们都是协议类型。在爬虫中,我们抓取的页面通常就是http 或https 协议的,这里首先了解一下这两个协议的含义。

HTTP 的全称是Hyper Text Transfer Protocol,中文名叫作超文本传输协议。HTTP 协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。HTTP 由万维网协会(World Wide Web Consortium)和Internet 工作小组IETF(Internet Engineering Task Force)共同合作制定的规范,目前广泛使用的是HTTP 1.1 版本。

HTTPS 的全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲是HTTP 的安全版,即HTTP 下加入SSL 层,简称为HTTPS。

HTTPS 的安全基础是SSL,因此通过它传输的内容都是经过SSL 加密的,它的主要作用可以分为两种。

  • 建立一个信息安全通道来保证数据传输的安全
  • 确认网站的真实性,凡是使用了HTTPS 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA 机构颁发的安全签章来查询

现在越来越多的网站和App 都已经向HTTPS 方向发展,例如:

  • 苹果公司强制所有iOS App 在2017 年1 月1 日前全部改为使用HTTPS 加密,否则App 就无法在应用商店上架
  • 谷歌从2017 年1 月推出的Chrome 56 开始,对未进行HTTPS 加密的网址链接亮出风险提示,即在地址栏的显著位置提醒用户“此网页不安全”
  • 腾讯微信小程序的官方需求文档要求后台使用HTTPS 请求进行网络通信,不满足条件的域名和协议无法请求

而某些网站虽然使用了HTTPS 协议,但还是会被浏览器提示不安全,例如我们在Chrome 浏览器里面打开12306,链接为:https://www.12306.cn/,这时浏览器就会提示“您的连接不是私密连接”这样的话,如图3 所示。

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

图3 12306 页面

这是因为12306 的CA 证书是中国铁道部自行签发的,而这个证书是不被CA 机构信任的,所以这里证书验证就不会通过而提示这样的话,但是实际上它的数据传输依然是经过SSL 加密的。如果要爬取这样的站点,就需要设置忽略证书的选项,否则会提示SSL 链接错误。

四、HTTP 请求过程

我们在浏览器中输入一个URL,回车之后便会在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来,模型如图4 所示。

从没想过,爬虫基础知识能讲这么简单! // Python网络爬虫实战

图4 模型图

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!