一、原理介绍

网络爬虫,是一种自动浏览网络的计算机程序,即通过指定 URL,直接返回对应网页的数据,而不需要人工点击浏览器链接来获取。不论是机器还是人工,从提交 URL 到看到网页,通常都包含以下步骤:

  1. 查找域名对应的服务器地址,向服务器发送请求

  2. 服务器响应请求,返回对应网页

  3. 解析网页,存储或展示网页内容

因此,一个爬虫应该具有抓取、解析、存储三大基本功能:

  • 抓取 是指爬虫需要模拟浏览器,向服务器发起访问请求,并获取服务器返回的响应。

  • 解析 是指爬虫对抓取到的响应体进行解析,从中提取出需要的数据。

  • 存储 是指爬虫将解析出来的数据保存到磁盘或数据库中。

Python 是一种强大而易学的高级编程语言,因为其广泛的通用性,又被称为“万能的胶水语言”。在爬虫方面,Python 提供了丰富的工具库,利用这些工具库,我们可以快速地实现一些爬虫小程序。

以下列举一些爬虫常用的 Python 库,后续爬虫实践中会用这些库中的部分功能,若要精通这些库的使用,请自行阅读相关文档 ^-^

1. 请求库

2. 解析库

3. 存储库

4. 全栈框架

二、相关知识

1. HTTP 基本原理

在浏览器地址栏输入网址,按一下回车键,就可以跳转到我们想要浏览的页面。这是我们日常上网时最常见的操作,这一项看似简单的操作背后蕴含了 HTTP 的基本原理:

任何网页在互联网上都有唯一的资源定位,即统一资源定位符(URL)。URL 与网页一一对应,也是访问网页的唯一方式。因此,当我们想在 PC 上浏览一个网页时,我们需要告诉浏览器目标网页的 URL。浏览器在根据我们提供的 URL 找出网页所在的服务器,并向服务器发起访问请求 Request。服务器在接收到请求后,对请求作出响应 Response,返回网页的 HTML 源代码。客户端浏览器接收到 HTML 源代码后,通过对代码进行解析得到我们在浏览器中看到的网页。

Chrome 浏览器提供了一套 Web 开发和调试的工具,通常称为 Chrome 开发者工具,在 Chrome 中打开网页,右键菜单中单击 检查,或者按下 F12 键,都可以进入开发者工具。关于 Chrome 开发者工具的使用见后续章节,这里只介绍利用开发者工具展示访问网页时的请求和响应。

以 Google 首页为例,按 F12 进入开发者工具,点击 Network 后,在左侧 Name 列表中选取 www.google.com,右侧面板中Headers 栏目下列出了请求 Request 和响应 Response 的头信息。除了头信息,请求 Request 和响应 Response 还包含其他信息。

2. 请求 Request

请求由客户端发送给服务端,主要包含四部分内容:请求方式(Request Method)、请求链接(Request URL)、请求头(Request Headers)、请求体(Request Body)。

(1) 请求方式

常见的请求方式有 GET 和 POST 两种:

  • GET:从指定的资源请求数据
  • POST:向指定的资源提交要被处理的数据

HTTP 方法:GET 对比 POST

(2) 请求链接

请求网页的 URL

(3) 请求头

请求头是客户端传递给服务器的请求相关的附加信息,常见信息列表如下:

(4) 请求体

对于 GET 请求,Request Body 一般为空。对于 POST 请求,Request Body 通常以表单数据 Form Data 的形式提交给服务器。

3. 响应 Response

响应由服务器返回给客户端,主要包含三部分内容:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)。

(1) 响应状态码

响应状态码表示服务器的响应状态。200 表示服务器正常响应,成功返回数据。常见状态码列举如下:

(2) 响应头

响应头是服务器传递给客户端的响应相关的附加信息,常见信息列表如下:

(3) 响应体

响应体是响应最重要的主体部分,服务器返回的网页数据都包含在响应体中。通过对响应体进行解析,就可以得到我们想要的网页内容。

三、HTML 语言基础

1. HTML 简介

HTML(Hyper Text Markup Language)称为超文本标记语言,它使用一套标签来标识网页中文字、按钮、表格、图片、视频等复杂的元素,以及网页中各区块的层次、样式等丰富的格式。

HTML 标签通常是由尖括号括起来的小写关键词,且成对出现,例如 和,第一个标签是开始标签,第二个标签是结束标签。从开始标签到结束标签构成一个元素,两个标签之间的内容称为元素的内容,HTML 的元素是可以嵌套的。

HTML 标签定义了元素的类型,常见标签列举如下表:

为了更丰富地表达元素,HTML 可以为标签设置多种属性。在 HTML 元素的开始标签中,通过 ** 属性名 =”属性值”** 这种键值对的方式,为元素定义更多的附加信息。通用属性列举如下:

注:完整的 HTML 标签和属性参见: HTML 参考手册

2. HTML 选择器

HTML 选择器用来从 HTML 源码中提取目标元素,常用的两种选择器为 CSS 选择器和 XPath 选择器。Chrome 开发者工具提供了定位目标元素以及测试选择器的功能。

定位目标元素 :首先点击左上角的小箭头,然后移动鼠标,指向网页上的目标元素,此时Elements 面板中将高亮该目标元素对应的 HTML 源码。

测试选择器:点击Console,切换到控制台面板,在命令行输入选择器,即可查看提取结果:CSS 格式为 $(‘CSS 选择器’),XPath 格式为 $x(‘XPath 选择器’)。

(1) CSS 选择器

常见的 CSS 选择器如下:

注:完整的 CSS 选择器参见: CSS 选择器参考手册

(2) XPath 选择器

XML(Extentsible Markup Language),即可扩展标记语言,也采用一组标签来定义数据,形式与 HTML 非常相似,与 HTML 最大的区别在于 XML 的标签可以自定义。

注:关于 XML 的更多内容参见:XML 教程

XPath(XML Path Language),即 XML 路径语言,最初设计是为了在 XML 文件中查找信息,现在也支持在 HTML 中进行搜索。XPath 定义了 7 种类型的文档节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点,并使用路径表达式在文档中选取节点。

常见的 Xpath 路径表达式如下:

注:XPath 教程参见:XPath 教程

(3) CSS 与 XPath 比较

对比 CSS 选择器与 XPath 选择器,CSS 选择器通常具有更简洁的表达,XPath 选择器则具有更强大的灵活性。

[译]XPath 和 CSS 选择器 - 紫云飞 - 博客园