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

Tawnie ·
更新时间:2024-11-14
· 866 次阅读

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

文章目录TagnameAttributestag属性的删除tag属性的修改多值属性tag中的字符串注释及特殊字符串 Tag

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

soup = BeautifulSoup('123') tag = soup.b

针对这个代码

name

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

Attributes

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

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

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

tag属性的删除 这两种都可以 del tag.attrs del tag['class'] tag属性的修改 soup = BeautifulSoup('123','lxml') tag = soup.b tag['class'] = 1 tag['id'] = 2 print(tag) 输出结果为 123 多值属性

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

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

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

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

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

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

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

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

soup = BeautifulSoup('123','xml') tag = soup.b print(tag['class']) print(tag) 输出结果为: 123 hhh 123 tag中的字符串 嗯 我发现这两种都可以 soup = BeautifulSoup('123','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('','xml') tag = soup.b print(tag) print(tag.string) 输出结果为:(一定要注意其不同) 我爱python

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

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


作者:Full stack.



soup

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章