Python 网络爬虫从0到1 (4):Beautiful Soup 4库入门详解

  从先前的几篇文章中,我们已经能够使用Requests库构造请求并获得正确的响应,但是在样例中我们也发现了仅使用Requests库的缺陷。在网络爬虫的设计中,仅能构造请求并收到响应是远远不够的。想要获取响应中有意义的信息并能够由此采取下一步行动,是整个流程中的重要一段。所以本篇文章,我们就来一起学习较为流行的HTML/XML数据分析提取库:Beautiful Soup 4

Python 网络爬虫从0到1 (4):Beautiful Soup 4库入门详解_第1张图片

Beautiful Soup 4介绍

  Beautiful Soup 4库是一个在Python爬虫设计中非常流行的数据分析提取库。它能够解析HTML/XML语言并生成文档树。由于其简单易用的特性被许多小型爬虫所采用。

  HTML语言作为一种标记语言,每一个元素都由一对标签包含,层层嵌套形成树状结构。当人去阅读这段代码时,实际内容会被一大串描述元素样式的代码淹没,观察较为繁琐;但程序阅读恰恰相反,标签化、结构化且严谨的语法非常适合程序(浏览器等)理解分析,并按照当初设计的方式渲染重构网页。

  我们获得的来自服务器的响应一般为HTML格式的一个页面,由于HTML语言特性,人类难以直观理解实际效果,这就需要一个程序来解析这个响应。浏览器核心也包含一个HTML解析器,而在爬虫中,Beautiful Soup 4库就起到了这样的效果。

  至于这个Python库的名称为什么是BeautifulSoup4(即bs4)而不是BeautifulSoup,是因为后者已经用来表示BeautifulSoup3库(为了兼容性原因仍然保留),为避免名称冲突,才使用这个名字。

  关于这个库的更多信息以及使用指南,请参阅Beautiful Soup 4官方手册(中文)Beautiful Soup 4.4.0 文档


Beautiful Soup 4库的安装、引用与测试

  • Beautiful Soup 4包安装与安装其他库包的方法相同,Windows cmd/Linux Terminal 下,输入如下命令
pip install beautifulsoup4

等待安装完成即可。

  • 引用这个库的方法与其他库略有不同,实际上,Beautiful Soup 4是一个类,包含在bs4包中,使用时只需要从包中单独引用BeautifulSoup类即可。使用from-import语句实现
from bs4 import BeautifulSoup

注意:BeautifulSoup中的BS为大写字母,Python对大小写敏感

  • 下面使用一个小样例来测试Beautiful Soup 4的功能,该类的基本功能会在下面讲到

示例实现步骤

  1. 使用Requests库下载了一个样例页面
  2. 将响应主体(HTML格式)作为参数声明了一个BeautifulSoup实例soup
  3. 使用其prettify()方法将主体内容进行了优化并输出
import requests
from bs4 import BeautifulSoup

r = requests.get("http://python123.io/ws/demo.html")
# 提交请求抓取响应
# print(r.text)
soup = BeautifulSoup(r.text, features="html.parser")
# 声明实例并将响应主体作为参数传入
print(soup.prettify())
#使用prettify()方法输出优化后的内容


BeautifulSoup类使用

 HTML基础知识

在了解BeautifulSoup类的原理前,先来补充一点HTML语言的相关知识。

HTML语言的各个元素均由标签构成,一对一对标签以及中间包括的内容构成了元素,例如:

<p class="title">Hello Worldp>

其中,

  • p:标签名称,p表示段落(paragraph)

  • class="title":标签的属性,属性键为class,值为"title",这个属性与CSS样式表相关

  • Hello World:标签主体内容

  • /p:标签结束符号,与p标签开始符号一一对应

  • 标签开始部分(标签名称和属性)与标签结束都由尖括号包含,两个尖括号中间的内容为标签主体内容

这样的标签嵌套叠加,形成了一个树状结构,被称为文档树

Python 网络爬虫从0到1 (4):Beautiful Soup 4库入门详解_第2张图片

附表:HTML常用标签

标签 名称 说明
链接
普通文本
文档主体内容标签
HTML文档中的分隔区块
创建表单用于用户输入
标题,n为等级1-6
图片
对一部分文本进行着色

你可能感兴趣的:(Python,Web,python,网络,爬虫)