Beautiful Soup库的介绍

简介: 本节中将介绍如何使用 Beautiful Soup 来解析 HTML 以获取我们想要的信息。

本节中将介绍如何使用 Beautiful Soup 来解析 HTML 以获取我们想要的信息。

1.安装第三方库

1.1 安装 Beautiful Soup

在命令行下通过 pip 安装  pip install beautifulsoup4

1.2 安装解析器 lxml

在命令行下通过 pip 安装 pip install lxml

2.使用 Beautiful Soup 提取信息

Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:TagNavigableStringBeautifulSoupComment。在介绍对上述四种对象的提取时,使用的 HTML 代码为:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>我的 Web 页面</title>
  </head>
  <body>
    <h1>Python 是一门优雅的语言。</h1>
    <img src="images/Python.png" alt="Python 语言 Logo" />
    <p class="python" name="application">使用 Python,我们可以做许多事情。</p>
    <ul>
      <li>Web 开发</li>
      <li>网络爬虫</li>
      <li>数据分析</li>
      <li>人工智能与机器学习</li>
      <li>自动化运维</li>
      <li>游戏开发</li>
    </ul>
    <p>人生苦短,我用 Python。</p>
    <p>
      如果想了解更多的 Python 语言的相关知识,可以查看
      <a href="https://docs.python.org/zh-cn/3/" id="link1">Python 官方文档</a
      >。
    </p>
  </body>
</html>

2.1 Tag

Tag 就是 HTML 中的标签,标签的概念,我们在「HTML 简介」中已经做了介绍,需要的同学可以回看下。下面我们来看下如何使用 Beautiful Soup 来提取 HTML 中的标签。首先,用 HTML 创建一个 Beautiful Soup 对象。

soup = BeautifulSoup(html, 'lxml')

2.1.1 各种标签的提取

2.1.1.1 head 标签

# head 标签
head = soup.head
print(head)

输出:

<head>
<meta charset="utf-8"/>
<title>我的 Web 页面</title>
</head>

2.1.1.2 title 标签

# title 标签
title = soup.title
print(title)

输出:

<title>我的 Web 页面</title>

2.1.1.3 a 标签

# a 标签
a = soup.a
print(a)

输出:

<a href="https://docs.python.org/zh-cn/3/" id="link1">Python 官方文档</a>

2.1.1.4 p 标签

# p 标签
p = soup.p
print(p)

输出:

<p class="python" name="application">使用 Python,我们可以做许多事情。</p>

2.1.2 标签的属性

标签有两个重要的属性:name 和 attrs。

name = soup.p.name
attrs = soup.p.attrs
print(name)
print(attrs)

输出:

p
{'class': ['python'], 'name': 'application'}

p 标签的 name 属性的值为 p,p 标签的 attrs 属性的值为 {'class': ['python'], 'name': 'application'}。这里把 p 标签的所有属性都打印了出来,得到的是一个字典。如果想单独获取某个属性,例如获取 class 属性,可以这样:

2.2 NavigableString

上面我们已经得到了标签,如果想获取标签内部的文字怎么办?很简单,用 .string 即可,例如:

title = soup.title
print(title.string)

输出:

我的 Web 页面

2.3 BeautifulSoup

BeautifulSoup 对象表示一个文档的全部内容,大部分时候,它是一个特殊的 Tag,可以分别获取它的类型、名称和属性。

print(type(soup))
print(soup.name)
print(soup.attrs)

输出:

<class 'bs4.BeautifulSoup'>
[document]
{}

2.4 Comment

Comment 对象是特殊类型的 NavigableString 对象,在对其进行内容输出的时候,是不包括注释符号的。对于 Comment 对象,如果不谨慎处理的话,可能会对我们的文本处理造成意想不到的麻烦。例如:我们将 HTML 中的

<a href="https://docs.python.org/zh-cn/3/"  id="link1">Python 官方文档</a>

改成

<a href="https://docs.python.org/zh-cn/3/"  id="link1"><!-- Python 官方文档 --></a>

我们来获取标签的内容:

a = soup.a
print(a.string)

输出:Python 官方文档我们发现在利用 .string 进行内容输出的时候,注释符号被去掉了,所以这可能会给我们带来不必要的麻烦。所以,在使用之前最好做下判断,判断代码如下:

if type(soup.a.string)==bs4.element.Comment:
    print soup.a.string

代码中,首先判断是否为 Comment 类型,然后再进行其他操作。

2.5 遍历文档树

2.5.1 直接子节点

2.5.1.1 .contents 属性

标签的 .contents 属性可以将标签的子节点以列表的方式输出

head = soup.head
print(head.contents)

输出:

['\n', <meta charset="utf-8"/>, '\n', <title>我的 Web 页面</title>, '\n']

可以通过遍历的方式获取列表中的内容:

for item in soup.head:
    print(item)

输出:

<meta charset="utf-8"/>
<title>我的 Web 页面</title>

2.5.1.2 .children 属性

标签的 .children 属性可以将标签的子节点以列表生成器的方式输出

head = soup.head
print(head.children)

输出:

<list_iterator object at 0x7fbfa5d6bdc0>

2.5.2 所有子孙节点

2.5.2.1 .descendants 属性

标签的 .contents 和 .children 属性仅包含标签的直接子节点,.descendants 属性包含标签的所有子孙节点。

head = soup.head
for item in head.descendants:
    print(item)

输出:

<meta charset="utf-8"/>
<title>我的 Web 页面</title>
我的 Web 页面

再举一个例子:

body = soup.body
for item in body.descendants:
    print(item)

输出:

<h1>Python 是一门优雅的语言。</h1>
Python 是一门优雅的语言。
<img alt="Python 语言 Logo" src="images/Python.png"/>
<p class="python" name="application">使用 Python,我们可以做许多事情。</p>
使用 Python,我们可以做许多事情。
<ul>
<li>Web 开发</li>
<li>网络爬虫</li>
<li>数据分析</li>
<li>人工智能与机器学习</li>
<li>自动化运维</li>
<li>游戏开发</li>
</ul>
<li>Web 开发</li>
Web 开发
<li>网络爬虫</li>
网络爬虫
<li>数据分析</li>
数据分析
<li>人工智能与机器学习</li>
人工智能与机器学习
<li>自动化运维</li>
自动化运维
<li>游戏开发</li>
游戏开发
<p>人生苦短,我用 Python。</p>
人生苦短,我用 Python。
<p>
      如果想了解更多的 Python 语言的相关知识,可以查看
      <a href="https://docs.python.org/zh-cn/3/" id="link1">Python 官方文档</a>。
    </p>
      如果想了解更多的 Python 语言的相关知识,可以查看
<a href="https://docs.python.org/zh-cn/3/" id="link1">Python 官方文档</a>
Python 官方文档
目录
相关文章
|
2月前
|
XML 数据格式
Beautiful Soup 库有哪些常用的方法
Beautiful Soup 库有哪些常用的方法
12 1
|
2月前
|
XML JavaScript 数据格式
Beautiful Soup 库是如何工作的
【2月更文挑战第22天】【2月更文挑战第68篇】Beautiful Soup 库是如何工作的
|
3月前
|
数据采集 XML 前端开发
Python爬虫 Beautiful Soup库详解#4
BeautifulSoup基础,节点选择器,方法选择器,css选择器【2月更文挑战第14天】
50 1
|
5月前
|
XML API 数据格式
Beautiful Soup
Beautiful Soup 是一个用于从网页中提取数据的 Python 库。它可以帮助用户轻松地解析 HTML 和 XML 文档,并从中提取所需的信息。Beautiful Soup 基于 Python 的标准库,因此无需安装任何额外的依赖包即可使用。
46 7
|
12月前
|
XML 数据格式 Python
|
Python
Beautiful Soup库的介绍
本节中将介绍如何使用 Beautiful Soup 来解析 HTML 以获取我们想要的信息。
59 0
BeautifulSoup的基本使用
要使用BeautifulSoup4需要先安装lxml,再安装bs4
50 0
BeautifulSoup的基本使用
|
XML 数据格式 Python
每日一模块——BeautifulSoup4
每日一模块——BeautifulSoup4
|
数据采集 前端开发 Python
python爬虫的BeautifulSoup库详解
文章目录 1.解析库 2.基本使用 3.标签选择器 3.1选择元素 3.2获取名称 3.3获取属性 3.4获取内容 3.5嵌套选择 3.6子节点和子孙节点 3.7父节点和祖先节点 3.8兄弟节点
python爬虫的BeautifulSoup库详解
|
Web App开发
BeautifulSoup库用法总结
0.写在前面 在python的爬虫中,经常需要用到强大的beautifulsoup库,如之前写的股票数据的爬取中就用到了它。在这里,将详细总结beautifulsoup的用法,来巩固相关知识。
1457 0