Beautiful Soup学习笔记(对我自己比较常用)

2024-01-19 15:38

本文主要是介绍Beautiful Soup学习笔记(对我自己比较常用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文仅为学习笔记,作用仅为方便自己查阅复习使用,具体学习路线参考
Beautiful Souo 4.2.0文档

文章目录

  • Tag
    • name
    • Attributes
    • tag属性的删除
    • tag属性的修改
    • 多值属性
    • tag中的字符串
    • 注释及特殊字符串

Tag

tag中两个最重要的属性: name和attributes

soup = BeautifulSoup('<b class="121">123</b>')
tag = soup.b

针对这个代码

name

每个tag都有自己的名字,通过 .name 来获取:tag.name输出得到b
当然,还可以改变tag的nametag.name = 'hhh'
重新输出后就会得到<hhh class="121">123</blockquote>

Attributes

一个tag可能有很多个属性. tag 有一个 “class” 的属性,值为 “boldest” ; tag的属性的操作方法与字典相同:

soup = BeautifulSoup('<b class="121">123</b>','lxml')
tag = soup.b
print(tag)
print(tag.attrs)
print(tag['class'])
输出结果为
<b class="121">123</b>
{'class': ['121']}
['121']

当然,我们可以对tag的属性进行修改或者删除

tag属性的删除

这两种都可以
del tag.attrs
del tag['class']

tag属性的修改

soup = BeautifulSoup('<b class="121">123</b>','lxml')
tag = soup.b
tag['class'] = 1
tag['id'] = 2
print(tag)
输出结果为
<b class="1" id="2">123</b>

多值属性

在这里下面肯定有疑问我会返回来看最常见的多值的属性是 class (一个tag可以有多个CSS的class). 还有一些属性 rel , rev , accept-charset ,headers , accesskey . 在Beautiful Soup中多值属性的返回类型是list

soup = BeautifulSoup('<b class="121 456">123</b>','lxml')
tag = soup.b
print(tag['class'])
print(tag.attrs)
输出结果为:
['121', '456']
{'class': ['121', '456']}

如果某个属性看起来好像有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,那么Beautiful Soup会将这个属性作为字符串返回(但是这个我还不太懂,希望以后复习的时候能搞懂)—突然搞懂了参见上面多值属性

soup = BeautifulSoup('<b id="my id">123</b>','lxml')
tag = soup.b
print(tag['id'])
print(tag.attrs)
输出结果为:
my id
{'id': 'my id'}

如果我们将tag转换成字符串时,多值属性会合并为一个值(中间用空格分隔)

soup = BeautifulSoup('<b class="123s">123</b>','lxml')
tag = soup.b
print(tag['class'])
tag['class'] = ['123', '1465'] # 注意这个必须得是字符串否则会报错
print(tag['class'])
print(tag)
输出结果为:
['123s']
['123', '1465']
<b class="123 1465">123</b>

如果上面那个不是字符串就会报错这个TypeError: sequence item 0: expected str instance, int found

如果转换的文档是XML格式,那么tag中不包含多值属性

soup = BeautifulSoup('<b class="123 hhh">123</b>','xml')
tag = soup.b
print(tag['class'])
print(tag)
输出结果为:
123 hhh
<b class="123 hhh">123</b>

tag中的字符串

嗯 我发现这两种都可以
soup = BeautifulSoup('<b class="123 hhh">123</b>','xml')
tag = soup.b
print(tag.string)
print(soup.string)
print(soup.text)
输出结果为:
123
123
123

tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用 replace_with()方法:

tag.string.replace_with("我爱python")

然后文章里面说如果想在BS外使用tag.string ,要使用unicode方法,当然我现在似乎不需要了解,先放这里如果想看去原文里面看看

注释及特殊字符串

Tag , NavigableString , BeautifulSoup 基本上是覆盖了htmlxml中的所有内容,但是还有一些特殊对象,比如文档的注释部分:

soup = BeautifulSoup('<b><!--我爱python--></b>','xml')
tag = soup.b
print(tag)
print(tag.string)
输出结果为:(一定要注意其不同)
<b><!--我爱python--></b>
我爱python

然后注释的格式为<!-- asdsada -->,上面代码试试删除其余符号都会出错

OK,今天先学到这里,下次继续冲冲冲!!!

这篇关于Beautiful Soup学习笔记(对我自己比较常用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622888

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情