【Python从入门到进阶】32、bs4的基本使用

news2024/9/29 1:19:32

接上篇《31、使用JsonPath解析淘票票网站地区接口数据》
上一篇我们介绍了如何使用JSONPath来解析淘票票网站的地区接口数据,本篇我们来学习BeautifulSoup的基本概念,以及bs4的基本使用。

一、BeautifulSoup简介

1、bs4基本概念

BeautifulSoup是一个Python库(简称“bs4”),用于从HTML或XML文件中提取数据。它的设计目标是使解析复杂的文档变得简单、快速,并提供一种便捷的方式来浏览和搜索文档树。

BeautifulSoup可以处理不规则标记、修复糟糕的HTML和提供简单的遍历和搜索功能。使用BeautifulSoup,可以通过标签名称、属性值和文本内容等条件来搜索文档元素,并提取所需的数据。

通过BeautifulSoup,可以轻松地提取文档中的数据,例如标题、段落、链接、表格等。您还可以通过遍历树状结构,定位某个特定元素、获取其属性值以及修改文档内容。

2、BeautifulSoup与lxml对比

(1)BeautifulSoup优点
简单易用,提供了简洁的API,使得从文档中提取数据变得容易。
支持多种解析器,包括标准库中的html.parser、lxml和xml等,具有较好的兼容性。可以处理不规则标记和修复糟糕的HTML,适用于实际应用中常见的网页解析任务。
(2)BeautifulSoup缺点
解析速度相对较慢,特别是在处理大型文档时可能会更明显。
功能相对较少,相比于专注于解析的库如lxml,功能选项较少。
(3)lxml优点
解析速度快,由于是C库的实现,处理大型文档效率高。
提供了丰富的功能选项,如XPath表达式、CSS选择器等,可以更精确地定位和提取数据。
(4)lxml缺点
相对于BeautifulSoup,使用起来稍微复杂一些,需要学习额外的功能和语法。
安装和配置可能需要一些额外的工作,尤其在某些平台和环境下。

综上所述,如果我们需要简单而易用的文档解析和数据提取,可以选择BeautifulSoup。如果您处理的是大量数据或复杂的文档结构,并且需要更高的解析速度和更多的功能选项,可以选择lxml。

二、bs4的安装及创建

使用BeautifulSoup需要先安装bs4库,然后导入相关模块。然后可以将HTML或XML文件传递给BeautifulSoup对象进行解析。解析后的文档将被转换成一个层次结构的树状对象,可以使用各种方法和属性来访问和操作这个树。示例代码:
注:首先要通过“pip install bs4”来安装bs4库。

# _*_ coding : utf-8 _*_
# @Time : 2023-08-20 17:48
# @Author : 光仔December
# @File : bs4基础联系
# @Project : Python_Projects

from bs4 import BeautifulSoup

# 要解析的HTML或XML文档
html_doc = """
<html>
<head>
    <title>示例网页</title>
</head>
<body>
    <h1>欢迎使用BeautifulSoup</h1>
    <p class="description">这是一个示例网页,用于演示BeautifulSoup的基本用法。</p>
    <ul>
        <li>列表项1</li>
        <li>列表项2</li>
        <li>列表项3</li>
    </ul>
</body>
</html>
"""

# 创建BeautifulSoup对象,并制定解析器(此处使用默认的html.parser)
soup = BeautifulSoup(html_doc, 'html.parser')

# 访问和操作解析后的文档树
title = soup.title # 获取标题元素
h1 = soup.h1 # 获取第一个<h1>元素
description = soup.find(class_="description") # 根据class属性查找<p>元素
list_items = soup.find_all('li') # 查找所有<li>元素

# 打印获取到的内容
print("标题:", title.text)
print("第一个<h1>元素:", h1.text)
print("描述段落:", description.text)
print("列表项:")
for item in list_items:
    print(item.text)

效果:

三、bs4的常用语法和操作

1、创建BeautifulSoup对象

使用BeautifulSoup函数可以将HTML或XML内容转换为BeautifulSoup对象。
语法:soup = BeautifulSoup(html_doc, 'html.parser')

2、标签选择器

使用标签名称可以直接选择对应的元素。
语法:soup.tag_name(选择第一个匹配到的标签)或 soup.find('tag_name')(选择所有匹配到的标签)。
第二层直接访问,如soup.a.name或soup.a.attrs。

3、属性选择器

使用标签名称和属性来选择元素。
语法:soup.find('tag_name', attrs={'attr_name': 'attr_value'})

4、CSS选择器

使用CSS选择器语法来选择元素。
语法:soup.select('css_selector')(返回所有匹配到的元素列表)

5、遍历文档树

使用.contents属性可以获取当前节点的所有子节点。
使用.parent属性可以访问当前节点的父节点。
使用.next_sibling和.previous_sibling属性可以访问当前节点的下一个兄弟节点和上一个兄弟节点。

6、获取元素内容

使用.text属性可以获取元素的文本内容。
使用.get('attribute_name')方法可以获取元素的特定属性值。

7、搜索文档树

使用.find()方法可以按条件查找第一个匹配的元素。
使用.find_all()方法可以查找所有匹配的元素。
可以通过标签名称、属性值、文本内容等条件进行搜索。

8、修改文档树

使用.replace_with(new_tag)方法可以替换当前节点为指定的新节点。
使用.append(new_tag)方法可以在当前节点末尾添加一个新节点。
使用.extract()方法可以将当前节点从文档树中移除。

以上是bs4的一些常用语法和操作,可以根据具体需求使用对应的方法和属性来解析、遍历和搜索HTML或XML文档树,并获取所需的数据。下面的示例代码演示了使用bs4常用的语法和操作来解析、遍历、搜索和修改包含更复杂HTML结构的文档树。通过逐个示例,大家可以了解如何使用不同的方法和属性来实现所需的功能:

# _*_ coding : utf-8 _*_
# @Time : 2023-08-20 18:06
# @Author : 光仔December
# @File : bs4基本语法练习
# @Project : Python_Projects

from bs4 import BeautifulSoup

# HTML文档
html_doc = """
<html>
<head>
    <title>示例网页</title>
</head>
<body>
    <h1>欢迎使用BeautifulSoup</h1>
    <div id="content">
        <p class="description">这是一个示例网页,用于演示BeautifulSoup的基本用法。</p>
        <ul>
            <li><a href="https://www.example.com">链接1</a></li>
            <li><a href="https://www.example.com">链接2</a></li>
            <li><a href="https://www.example.com">链接3</a></li>
        </ul>
        <table>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <tr>
                <td>张三</td>
                <td>25</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>30</td>
            </tr>
        </table>
    </div>
</body>
</html>
"""

# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')

# 标签选择器示例
title = soup.title
print("标题:", title.text)
h1 = soup.h1
print("第一个<h1>元素:", h1.text)

# 直接访问标签示例
a_tag = soup.a
print("a标签名称:", a_tag.name)
print("a标签属性:", a_tag.attrs)

# 属性选择器示例
description = soup.find('p', class_="description")
print("描述段落:", description.text)

# 搜索文档树示例
first_link = soup.find('a')
print("第一个链接地址:", first_link['href'])

# CSS选择器示例
links = soup.select('ul li a')
print("链接:")
for link in links:
    print(link.text)

# 遍历文档树示例
table = soup.table
rows = table.find_all('tr')
print("表格内容:")
for row in rows:
    cells = row.find_all('td')
    for cell in cells:
        print(cell.text)
    print()

# 修改文档树示例
replacement_tag = soup.new_tag('b')
replacement_tag.string = "新的加粗文本"
# 将p中间的字符串替换为新的加粗文本
description.string.replace_with(replacement_tag)

# 打印修改后的内容
print("更换后的描述段落:", soup.div.p)

效果:

至此,有关使用BeautifulSoup的基本介绍及语法示例就全部学习完毕,下一篇我们来使用BeautifulSoup来抓取星巴克的数据。

参考:尚硅谷Python爬虫教程小白零基础速通教学视频

转载请注明出处:https://guangzai.blog.csdn.net/article/details/132394556

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm网络游戏公司官方平台源码和文档

ssm网络游戏公司官方平台源码和文档029 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它…

git协议实现管理(三个步骤)

GitHub官网访问&#xff1a; https://github.com/dashboard 初次使用git的用户要使用git协议大概需要三个步骤: 一、生成密钥对 二、设置远程仓库(本文以github为例)上的公钥 三、把git的remote url远程仓库URL可访问路径修改为git协议(以上两个步骤初次设置过以后&#xff0c…

react 11之 router6路由 (两种路由模式、两种路由跳转、两种传参与接收参数、嵌套路由,layout组件、路由懒加载)

目录 react路由1&#xff1a;安装和两种模式react路由2&#xff1a;两种路由跳转 &#xff08; 命令式与编程式&#xff09;2-1 路由跳转-命令式2-2 路由跳转-编程式 - 函数组件2-2-1 app.jsx2-2-2 page / Home.jsx2-2-3 page / About.jsx2-2-4 效果 react路由3&#xff1a;函数…

OpenCL实现SobelFilter(行列分解)

1.行列分解数学原理 row_filter[1 0 -1], col_filter[1 2 1] row_filter[1 2 1], col_filter[1 0 -1] 2.非局部内存实现 __kernel void sobel_filter_separable(__global uchar* padSrc, __global uchar* dst, int height, int width, int pad_width) {__local short local_ou…

【机器学习 | 分类指标大全】全面解析分类评估指标:从准确率到AUC,多分类问题也不在话下, 确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

上传镜像到阿里云的ACR

1、开通阿里云ACR 2、在ACR 中创建命名空间 3、本地安装docker 4、登录到 开通ACR&#xff0c;需要配置访问凭证 [rootmaster ~]# docker login --username***lb registry.cn-beijing.aliyuncs.com Password: 5、给镜像打标签 [rootmaster ~]# docker images REPOSITORY …

❤ Vue工作常用的一些动态数据和方法处理

❤ Vue工作常用的一些动态数据和方法处理 &#xff08;1&#xff09;动态拼接相对路径结尾的svg 错误写法一 ❌ 正确写法 &#x1f646; <img :src"require(/assets//amazon/svg/homemenu${index}.svg)" style"height: 20px;display: block;margin: 0 au…

操作系统-笔记-第三章-内存管理

目录 三、第三章——内存管理 1、内存的基础知识 &#xff08;1.1&#xff09;程序装入&#xff08;三种&#xff09;——绝对装入 &#xff08;1.2&#xff09;程序装入&#xff08;三种&#xff09;——可重定位装入 &#xff08;1.3&#xff09;程序装入&#xff08;三…

[b01lers2020]Life on Mars1

打开靶场 直接bp抓包 多次点击左侧超链接 发现/query?search这个参数一直在发生改变 可以发现它返回了json格式的数据&#xff0c;猜测是sql注入 放进hackbar进行操作 orderby进行判断 http://6f5976a0-0364-4c05-a7f5-6f0c863e7e41.node4.buuoj.cn:81/query?searchamazonis…

铜矿人员定位安全方案

针对铜矿中的人员定位安全需求&#xff0c;可以采用以下方案&#xff1a; 1.实时人员定位系统&#xff1a;建立一个实时人员定位系统&#xff0c;通过在矿工的工作服或安全帽上安装UWB或RFID定位设备&#xff0c;以及相应的接收器和基站&#xff0c;实时跟踪和定位矿工的位置。…

苍穹外卖 day2 反向代理和负载均衡

一 前端发送的请求&#xff0c;是如何请求到后端服务 前端请求地址&#xff1a;http://localhost/api/employee/login 路径并不匹配 后端接口地址&#xff1a;http://localhost:8080/admin/employee/login 二 查找前端接口 在这个页面上点击f12 后转到networ验证&#xff0…

高并发内存池(PageCache)[3]

原理 PageCache 共128页 static const size_t NPAGES 128;centralcache向pagecache申请2page时&#xff0c;首先向下扫描&#xff0c;有大的会切分出来&#xff0c;然后再挂在对应桶当中 centralcache从pagecache获取span 计算一次获取几页 static const size_t PAGE_SH…

Servlet+Jsp+JDBC实现房屋租赁管理系统(源码+数据库+论文+系统详细配置指导+ppt)

一、项目简介 本项目是一套基于ServletJsp房屋租赁管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;…

如何最简单、通俗地理解什么是机器学习?

那就究竟什么是学习呢?诺贝尔经济学奖和图灵奖双料得主、卡耐基梅隆大学的赫伯特 西蒙 (Herbert Simon) 教授是这样定义的&#xff1a;“学习是系统通过经验提升性能的过程”。可以看到&#xff0c;学习是一个过程&#xff0c;并且这里有3个关键词&#xff0c;即经验、提升和…

【万能模型训练方法】你没看错,就这么简单

1. 只支持DF结构(Liaef结构特殊&#xff0c;不支持true face机制) 2. dst丢各种人脸数据进去&#xff0c;越杂越好&#xff0c;src保持单人数据 3. 训练时把true face参数打开&#xff0c;推荐0.01 你可以在别的DF预训练模型上&#xff0c;按上述方法练。然后就挂机练&#xff…

GaussDB之应用无损透明(ALT)

1. 背景 GaussDB作为一款企业级分布式数据库&#xff0c;提供了“同城跨AZ双活、两地三中心、双集群强一致”等极致的高可用容灾能力。当某个数据库节点由于故障无法对外提供服务时&#xff0c;为了继续保证数据库服务的可用性&#xff0c;JDBC驱动会将业务后续的数据库连接请…

Python入门--变量和数据类型

什么是变量&#xff1f; 在编程中&#xff0c;变量是指内存中的一段存储空间&#xff0c;用于存储数据。使用变量可以方便地存储数据并在程序中进行操作。 如何定义变量&#xff1f; 在Python中&#xff0c;可以使用“”符号来定义变量&#xff0c;例如&#xff1a; a 1 b …

python刷小红书流量(小眼睛笔记访问量),metrics_report接口,原理及代码,以及x-s签名验证2023-08-21

一、什么是小眼睛笔记访问量 如下图所示&#xff0c;为笔记访问量。 二、小眼睛笔记访问量接口 1、url https://edith.xiaohongshu.com/api/sns/web/v1/note/metrics_report 2、payload data{"note_id": note_id,"note_type": note_type,"report_t…

Linux解决RocketMQ中NameServer启动问题

启动步骤可以查看官网&#xff0c;https://github.com/apache/rocketmq 一下说明遇到的问题。 1&#xff1a;ROCKETMQ_HOME问题 根据官网提示进入mq/bin目录下&#xff0c;可以使用./mqnamesrv进行NameServer启动&#xff0c;但是会遇到第一个问题&#xff0c;首次下载Rocket…

变量与条件语句

目录 1、何为变量 变量的基础知识 1.1、取名字 1.2、弱引用和强引用 1.3、read -p 1.4、变量的作用范围 1.5、运算&#xff08;整数&#xff09; 1.6、环境变量 1.7、位置变量 1.8、预设变量 2、条件语句 2.1、测试 2.1.1、比较整数数值 2.1.2、字符串比较 2.1.…