BeautifulSoup4

2023-07-30 17:39:39 浏览数 (1)

参考链接:https://github.com/DeronW/beautifulsoup/blob/v4.4.0/docs/index.rst

安装:

代码语言:javascript复制
pip install beautifulsoup4

创建一个bs实例:

代码语言:javascript复制
#  直接打开文件
soup = BeautifulSoup(open("index.html"))
#  使用字符串创建
soup = BeautifulSoup("<html>xxx</html>")

解析器:

代码语言:javascript复制
#  Python标准库
BeautifulSoup(markup, "html.parser")

#  lxml
#  html解析器
BeautifulSoup(markup, "lxml")
#  xml解析器
BeautifulSoup(markup, ["lxml-xml"])
BeautifulSoup(markup, "xml")

#  htmll5lib
BeautifulSoup(markup, "html5lib")

Tag对象属性:

代码语言:javascript复制
#  获取子tag,变量名与html或xml标签相同,只获取第一个
#  例如h2,p
Tag.tag_name

#  的标签名
Tag.name

#  html属性
#  例如id,class
tag['id']
#  获取所有属性,返回一个字典
tag.attrs

#  获取tag中的字符串(当tag中只有一个字符串时生效,否则返回None)
#  如果tag只有一个子节点,也会输出这个子节点(字符串相当于一个子节点)
tag.string

#  遍历获取字符串,返回一个列表
tag.strings

#  遍历获取字符串,删除空格与换行
tag.stripped_strings

#  获取所有子节点,返回一个列表
tag.contents

#  子节点生成器,可对子节点进行循环
tag.children

#  遍历获取所有子孙节点,返回一个列表
tag.descendants

#  获取父节点
tag.parent

#  递归获取父节点,返回一个列表
tag.parents

#  获取兄弟节点
tag.previous_sibling
tag.next_sibling

#  对兄弟节点进行迭代输出
tag.next_siblings
tag.previous_siblings

#  获取上一个/下一个被解析的对象
tag.previous_element
tag.next_element

#  迭代获取上一个/下一个被解析的对象
tag.previous_elements
tag.next_elements

Tag对象方法:

代码语言:javascript复制
#  搜索子节点,返回第一个结果
#  标签名,例如p,h2
#  也可以是正则
#  也可以是列表
#  也可以是属性
#  string参数,搜索包含string的tag
#  设置数量
tag.find('p')
tag.find(re.compile("t"))
tag.find(['a','p'])
tag.find('a', class_='aa')
tag.find(string='aaa')
tag.find('a', limit=5)

#  搜索子节点,返回一个列表
tag.find_all()
#  搜索父节点
tag.find_parent()
tag.find_parents()
#  搜索兄弟节点
tag.find_next_sibling()
tag.find_next_siblings()
tag.find_previous_sibling()
tag.find_previous_siblings()
#  向前搜索
tag.find_previous()
tag.find_all_previous()
#  向后搜索
tag.find_next()
tag.find_all_next()
#  css选择器,和css语法一样
tag.select('a[href$="tillie"]')

#  添加子节点
tag.append("<p>aaa</p>")
#  插入子节点
tag.insert(0, '<p>aaa</p>')
#  在当前节点前添加
tag.insert_before()
#  在当前节点后添加
tag.insert_after()
#  清除节点
tag.clear()
#  移除当前节点,并返回
tag.extract()
#  移除当前节点,并销毁
tag.decompose()
#  替换节点
tag.replace_with()
#  对节点进行封装
tag.wrap(tag.new_tag("b"))
#  移除节点标签
tag.unwrap()
#  获取文本
tag.get_text()
#  格式化输出
print(tag.prettify())

0 人点赞