CSS 选择器:BeautifulSoup4
from: Mp
ps: 下文的使用方法只列出了常用的,详细请看官方文档
概念
Beautiful Soup基于HTMLDOM,会载入整个文档,解析整个DOM树
官方文档:
使用
创建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标签内内容为注释
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
print(soup.a.string) # 注释符号不输出,只输出内容
# Elsie
print(type(soup.a.string))
# <class 'bs4.element.Comment'>
遍历文档树 以head标签为例
"<head><title>The Dormouse's story</title></head>"
# .content 属性可以将tag的子节点以列表的方式输出
print(soup.head.contents)
# [<title>The Dormouse's story</title>]
print(soup.head.contents[1]) # 获取列表中某一元素
# .children 返回的是一个list生成器对象
print(soup.head.children)
# <listiterator object at 0x7f71457f5710>
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")))
网友评论