本文仅为学习笔记,作用仅为方便自己查阅复习使用,具体学习路线参考
Beautiful Souo 4.2.0文档
tag中两个最重要的属性: name和attributes
soup = BeautifulSoup('123')
tag = soup.b
针对这个代码
name每个tag都有自己的名字,通过 .name 来获取:tag.name
输出得到b
当然,还可以改变tag的nametag.name = 'hhh'
重新输出后就会得到123
一个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
基本上是覆盖了html
和xml
中的所有内容,但是还有一些特殊对象,比如文档的注释部分:
soup = BeautifulSoup('','xml')
tag = soup.b
print(tag)
print(tag.string)
输出结果为:(一定要注意其不同)
我爱python
然后注释的格式为,上面代码试试删除其余符号都会出错
OK,今天先学到这里,下次继续冲冲冲!!!