1. 安装BS4
pip install beautifulsoup4
pip install lxml
2. 对象种类
bs4将html文档解析成一个树形结构,每个节点都是python对象,大概可分为下面四种:
2.1 Tag
后面再详细介绍,先介绍最重要的两个属性
name
soup = BeautifulSoup("<li><a href='https://news.cnblogs.com/' οnclick='''countClicks(''nav'', ''skin-navbar-news'')'''>新闻</a></li>",features="lxml")
print(soup)
a=soup.a
print(a)
print(a.name)
# 修改name会影响,bs4对html文档的解析
a.name = "b"
print(a.name)
print(a)
print(soup)
attributes
对于tag对象的属性操作,和操作字典一样
from bs4 import BeautifulSoup
soup = BeautifulSoup("<li><a class='a b c d e' href='https://news.cnblogs.com/' οnclick='countClicks()'>新闻</a></li>",features="lxml")
a = soup.a
# 查看所有属性及其值
a_dic = a.attrs
print(a_dic)
for item in a_dic.keys():
print(a_dic[item])
a_dic["href"] = "https://www.baidu.com"
a_dic["data-index"] = 99
print(a_dic["class"])
对于含有多个属性值的属性,查看属性时,返回列表,元素为属性值
2.2 NavigableString
Beautiful Soup用 NavigableString 类来包装tag中的字符串
from bs4 import BeautifulSoup
soup = BeautifulSoup("<li><a class='a b c d e' href='https://news.cnblogs.com/' οnclick='countClicks()'>新闻</a></li>",features="lxml")
a = soup.a
print(a.string)
print(type(a.string))
# tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用 replace_with() 方法
a.string.replace_with("news")
print(a.string)
print(a)
如果想在Beautiful Soup之外使用 NavigableString 对象,需要调用 unicode() 方法,将该对象转换成普通的Unicode字符串
,否则就算Beautiful Soup已方法已经执行结束,该对象的输出也会带有对象的引用地址.这样会浪费内存.
2.3 BeautifulSoup
BeautifulSoup 对象表示的是一个文档的全部内容,BeautifulSoup 对象并不是真正的HTML或XML的tag,没有name和attribute属性
2.4 Comment
Comment 对象是一个特殊类型的 NavigableString 对象
NavigableString 存在许多子类,不用适用于解析xml文件