Python中BeautifulSoup4的基本使用

CSS 选择器:BeautifulSoup4

from: Mp
ps: 下文的使用方法只列出了常用的,详细请看官方文档

概念

Beautiful Soup基于HTMLDOM,会载入整个文档,解析整个DOM树

官方文档:

http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

使用

创建bs对象

# 打开本地HTML文件的方式来创建对象
soup = BeautifulSoup(open('xxxx.html'))
# 创建Beautiful Soup对象
soup = BeautifulSoup(html, "lxml")  # 指定lxml解析器

格式化输出soup对象内容

print(soup.prettify())

Tag 类

# 获取Tag  soup.标签名  查找的是在所有内容中的第一个符合要求的标签
print(soup.标签名)

# name是获取当前标签名称,soup.name为[document]
print(soup.标签名.name)

# attrs获取当前标签的所有属性和值,以键值对形式存入字典返回  下文以 a 标签为例
print(soup.a.attrs)
# 获取标签某一属性的值
print(soup.a['href'])
# 修改标签某一个属性的值
soup.a['href'] = "http://www.peipeipei.com"
# 删除某一属性
del soup.a['class']

NavigableString 类 以p标签为例

# 获取标签内内容
print(soup.p.string)
print(type(soup.p.string))

Comment类 以a标签为例,a标签内内容为注释

,

print(soup.a.string)  # 注释符号不输出,只输出内容
# Elsie
print(type(soup.a.string))
# 

遍历文档树 以head标签为例

"The Dormouse's story"

#  .content 属性可以将tag的子节点以列表的方式输出
print(soup.head.contents)
# [The Dormouse's story]
print(soup.head.contents[1])  # 获取列表中某一元素

# .children 返回的是一个list生成器对象
print(soup.head.children)
# 
for child in soup.body.children:
    print(child)

# .descendants 对所有tag的子孙节点进行递归循环
for child in soup.descendants:
    print(child)


# .string 返回最里面的内容
print(soup.head.string)
print(soup.title.string)  # 两个输出是一样的

搜索文档树

find_all(name, attrs, recursive, text, **kwargs)
# find用法相同,只返回一个

# name参数可以查找所有名字为 name 的tag,可以是字符串,正则表达式,列表
print(soup.find_all('a'))
for tag in soup.find_all(re.compile("^b")):
    print(tag.name)
print(soup.find_all(["a", "b"]))

# keyword参数直接匹配属性对应的值
print(soup.find_all(class_="sister"))  # 因为class在python中已经有了,为了防止冲突,所以是class_
print(soup.find_all(id='link2'))

# text参数搜索文档中的字符串内容,与name参数的可选值一样,text参数接受字符串,正则表达式,列表
print(soup.find_all(text="Elsie"))
print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
print(soup.find_all(text=re.compile("Dormouse")))

你可能感兴趣的:(Python中BeautifulSoup4的基本使用)