bs4 是将复杂的HTML文档转换为一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种
-Tag -NavigableString -BeautifulSoup -Comment
from bs4 import BeautifulSoup
file = open("./baidu.html","rb")
html = file.read().decode()
bs = BeautifulSoup(html,"html.parser")
print(bs.title) #<title>百度一下,你就知道 </title>
#
print(type(bs.head))
# #<class 'bs4.element.Tag'> Tag标签只能获取第一个内容
#
#
# print(bs.title.string) #百度一下,你就知道
# print(type(bs.title.string)) #<class 'bs4.element.NavigableString'>标签中的字符串
#
# print(type(bs)) #<class 'bs4.BeautifulSoup'> 表示整个文档
#
# print(bs.a.string) #新闻
# print(type(bs.a.string)) #<class 'bs4.element.Comment'>是一个特殊的NavigableString,输出的不包含注释和符号
#----------------------文档遍历
#遍历
# print(bs.head.contents)
# print(bs.head.contents[1])
#文档搜索
#1)find_all 会查找与字符串完全匹配的内容
#list = bs.find_all("a")
#search 正则表达式来匹配内容
import re
#list = bs.find_all(re.compile("a"))
#方法 :传入一个函数,根据函数的要求来搜索
# def name_is_exists(tag):
# return tag.has_attr("name")
# list = bs.find_all(name_is_exists)
# for i in list:
# print(i)
# print(list)
def out(list):
for i in list:
print(i)
#2) kwargs 参数
# list = bs.find_all(id = "head")
# out(list)
#3)text参数
#list = bs.find_all(text= "hao123")
# list = bs.find_all(text= re.compile("\d")) #用正则表达式来查找目标内容
# out(list)
#4)limit 参数 限定数量
# list = bs.find_all("a",limit=4)
# out(list)
#css选择器
# print(bs.select("title")) #通过
#
# out(bs.select(".mnav")) #通过类名来查找
#
# out(bs.select("#u1")) #通过Id来查找
# out(bs.select("a[class='bri']")) #通过属性来查找
# out(bs.select("head>title")) #通过子标签来查找
out(bs.select(".mnav~.bri")) #兄弟标签
out( bs.find_all(text = re.compile(r".*.com")))