这节课来学习一下什么是BeautifulSoup库
功能:用于网页的数据解析
BeautifulSoup4将复杂的HTML文档装换为一个复杂的树形结构
每个节点都是python对象,所有对象可以归纳为以下四种:
-Tag 标签及其第一个内容(例如:
-NavigableString 标签里的内容(字符串)(例如:百度一下,你就知道,为内容)
-BeautifulSoup 整个文档(用于整个文档方法的访问)
-Comment 特殊的NavigableString,输出的内容不包含注释
from bs4 import BeautifulSoup
file = open("./baidu.html",'rb')
html = file.read()
bs = BeautifulSoup(html,"html.parser") # 使用 html.parser解析器,解析html文档
# 1.Tag 标签及其第一个内容(例如:<title>百度一下,你就知道</title>,title为标签)
# 2.NavigableString 标签里的内容(字符串)(例如:百度一下,你就知道,为内容)
# 找到第一个匹配到的标签及其内容(了解)
print(bs.title)
print(bs.a)
print(bs.head)
# 找到第一个匹配到的标签对应的内容(不打印标签)
print(bs.title.string) # 字符串
# 找到第一个匹配到的标签所有的属性(不打印标签)
print(bs.title.attrs) # 字典
# 3.BeautifulSoup 整个文档(用于整个文档方法的访问)
print(bs)
print(bs.name)
print(bs.a.string)
# ----------------------------------------------------------------------(用)
# 遍历文档树(更多内容请百度)
# .contents:获取Tag的所有子节点,返回一个list
# .children:获取Tag的所有子节点,返回一个生成器
# .descendants:获取Tag的所有子孙节点
print(bs.head)
print('-----------------------------')
print(bs.head.contents) # 使用contents方法,以列表形式得到bs的head的内容
# 文档的搜索
# 1.find_all():配合字符串、正则表达式、自定义函数,查找内容
# 2.kwargs 参数
# 3.text 文本参数
# 4.limit 参数
#-------------------------------------------------------------------1.find_all()
find_all('字符串'):字符串过滤,查找与字符串完全匹配的内容
t_list = bs.find_all('a') # 找到所有a标签
print(t_list)
# 正则表达式搜索:使用search()方法匹配内容
import re
t_list = bs.find_all(re.compile("a"))
print(t_list)
# 方法:传入一个函数(方法),根据函数要求搜索(了解)
def name_is_exists(tag):
return tag.has_attr('name') # 返回具有name属性的
t_list = bs.find_all(name_is_exists)
for i in t_list:
print(i)
#-----------------------------------------------------------------------2.kwargs
t_list = bs.find_all(id="head")
t_list1 = bs.find_all(class_=True)
t_list2 = bs.find_all(id="head")
for item in t_list:
print(item)
#-----------------------------------------------------------------------3.text 文本参数
t_list = bs.find_all(text="hao123")
t_list1 = bs.find_all(text=["hao123",'地图'])
t_list2 = bs.find_all(text=re.compile("\d")) # 用正则表达式查找包含特定文本的内容
for item in t_list:
print(item)
#-------------------- ---------------------------------------------------4.limit 参数
t_list = bs.find_all("hao123",limit=3) # 限定查找的个数
# css选择器
bs.select('标签')
print(bs.select('title'))
bs.select('类名')
print(bs.select('.mnav'))
bs.select('ID')
print(bs.select('#u1'))
bs.select('标签[属性]')
print(bs.select("a[class='bri']"))
bs.select('标签>子标签')
print(bs.select("head>title"))
bs.select('类名~兄弟类名')
print(bs.select(".mnav ~ .bri"))
你学会了吗?