首页 > 其他分享 >Beautiful Soup库的介绍

Beautiful Soup库的介绍

时间:2022-10-15 21:33:19浏览次数:38  
标签:Beautiful Web head soup Python 标签 介绍 Soup 输出

本节中将介绍如何使用 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 种:​​Tag​​,​​NavigableString​​,​​BeautifulSoup​​,​​Comment​​。在介绍对上述四种对象的提取时,使用的 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 官方文档

标签:Beautiful,Web,head,soup,Python,标签,介绍,Soup,输出
From: https://blog.51cto.com/u_15641375/5759286

相关文章

  • 软光栅渲染器开发01-背景介绍以及第一个三角形
    1.为什么是软光栅渲染器正常来讲,一个有志于进行游戏或者图形开发的人,在实际的生产环境中,大多是依赖于游戏引擎或者常见图形API(OpenGL,DirectX,Vulkan)的封装来进行工作......
  • Linux学习笔记 | Shell基本介绍
    (一)内核(Kernal)      内核,是一个​​操作系统​​的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、​​......
  • Pulsar基本介绍
    基本概念订阅组:类似于Kafka中的消费者组,不同订阅组之间消费消息互不干扰主题:分为非分区主题和分区主题非分区主题:一个主题和一个Broker绑定分区主题:由一组非分区内部......
  • HM-SCAli1【微服务介绍】
    1课程介绍https://www.bilibili.com/video/BV1R7411774f2系统架构演变3微服务架构介绍3.1微服务架构的常见问题这么多小服务,如何管理他们?(服务治理注......
  • Redis6 新功能介绍
    特性的详细细节在此不赘述,我们来看Redis6.0,。Redis6.0版本特性大约可以分为四类,如下表新特性内核优化应用优化其他ACL权限管控(包括ACLLOG)过期Key回收优化......
  • Beats 入门实战(2)--FileBeat 介绍
    本文主要介绍Filebeat的相关概念及基本使用,相关的环境及软件信息如下:CentOS 7.9、FileBeat8.2.2、Logstash8.2.2、Elasticsearch8.2.2。1、Filebeat简介1.1、File......
  • 介绍几款 Python 类型检查工具
     近日,微软在Github上开源了一个Python静态类型检查工具:​​pyright​​,引起了社区内的多方关注。微软在开源项目上的参与力度是越来越大了,不说收购Github这种大的战......
  • Python爬虫之mongodb介绍和安装
    Mongodb的介绍和安装学习目标了解非关系型数据库的优势了解mongodb的安装1.mongodb的介绍1.1什么是mongodbmongodb是一个功能最丰富的NoSQL非关系数据库。由C++语言......
  • 高通骁龙SDM450平台功能介绍
    XY450安卓核心板是一款基于高通SDM450平台高性能、可运行安卓操作系统的4G智能模块,支持LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等多种制式;支持WiFi802.11b/g/n,BT4.0......
  • 001.软考介绍
               ......