BeautifulSoup 解析HTML
官方文档: https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
入门
from bs4 import BeautifulSoup
"""
1.
基于请求返回得html文件也可以给BeautifulSoup 解析
resp = requests.get("https://www.baidu.com")
resp.encoding = 'utf-8'
html = resp.text
2.BeautifulSoup 将复杂的HTML 文档转换成一个复杂的树形结构,每个节点都是Python对象,所有的对象可以归纳为4种:
- Tag
- NavigableString
- BeautifulSoup
- Comment
"""
# 本地html文件
f = open('./test.html', 'rb')
html = f.read()
# bs 代表整个HTML对象
bs = BeautifulSoup(html, 'html.parser')
print(bs.title) # 获得 HTML 中的<title>标签 ,<title>测试报告</title>
print(f"bs.tiele 的类型:{type(bs.title)}") # out :bs.tiele 的类型:<class 'bs4.element.Tag'>
# 获得<title> 标签中的值
print(bs.title.string)
print(f"bs.tiele.string 的类型:{type(bs.title.string)}") # out: s.tiele.string 的类型:<class 'bs4.element.NavigableString'>
# 获得第一个<meta> 标签的所有属性
print(bs.meta.attrs)
# 返回一个列表,包含了<head>标签中的所有内容
print(bs.head.contents)
# 获得所head 的所有子节点
print(bs.head.children)
# print(bs.text) 获得所有标签中的值
find_all 方法
# 1.根据标签的名称查找所有的该标签,完全匹配
bs.find_all("a")
# 2.与正则表达式结合使用: 匹配标签名称中包含a的,并返回该标签内的所有内容
bs.find_all(re.compile("a"))
# 3.传入一个函数: 查找所有 有name属性的标签
bs.find_all(tag -> tag.has_attr("name"))
# 4.根据参数来查找: 返回所有 id = 新闻的标签及其子标签
bs.find_all(id='新闻')
# 5. text 参数: 应用正则表达式来查找包含特定文本的内容(标签里的内容)
bs.find_all(text = re.compile('\d'))
# 6. limit参数: 返回找到的前两个a 标签
bs.find_all(a,limit = 2)
CSS 选择器
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/15849522.html