# -*- code = utf-8 -*-
# @Time : 2022/10/8 0008 9:50
# @Author : IT球球
# @File : Bs4.py
# @Software : PyCharm
'''
Beautifulsoup4 将复杂html文档转换成一个复杂的树形机构,每个节点都是python对象,所有对象可归纳四种
Tag
NavigableString
BeautifulShop
Comment 是一个特殊的NavigableString,输出的内容不包含注释符号
'''
from bs4 import BeautifulSoup
file = open('路径','rb') #rb 已二进制的方式读取
html = file.read().decode('utf-8')
bs = BeautifulSoup(html,'html.parser') # html.parser 表示解析器,我们选用的这一种
#Tag
print(bs.title) # <title>标题</title> bs.标签名,只能拿到写的第一个标签
#NavigableString
print(bs.title.string) # 标题 bs.标签名.string 直接获取内容
print(bs.title.attrs) # {'class' : 'baidu' , 'value' : '测试'} bs.标签名.attrs 用字典保存标签所有的属性
#文档的遍历
#字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all('a') # 查找所有的a标签
print(t_list) # 把所有的a标签放在一个列表里面全部返回
#正则表达式搜索,使用search()方法来匹配内容
import re
t_list = bs.find_all(re.compile('a'))
print(t_list) #只要有a就会返回回来
#方法: 传入一个函数(方法),根据函数的要求来搜索
def name_is_exises(res):
return res.has_attr("name")
t_list = bs.find_all(name_is_exises)
print(t_list) #返回所有有name属性的标签
#2.kwargs 参数
t_list = bs.find_all(id='head')
print(t_list) # 把id=head 下面所有内容全部返回,包含子标签
#3.text参数
t_list = bs.find_all(text=['hao123','地图'])
print(t_list) # 存在列表里的内容就原样返回 ['hao123','地图']
t_list = bs.find_all(text = re.compile("\d")) # 应用正则表达式来查找包含特定文本的内容 (标签里的字符串) \d返回所有是数字的内容
print(t_list)
t_list = bs.find_all('a',limit=3) # 只返回前3个
#css选择器
print(bs.select('title')) # ['<title>标题</title>'] 通过标签查找
print(bs.select('.mnav')) # 通过类名来查找
print(bs.select('#header')) # 通过类ID来查找 返回里面所有内容包含下级
print(bs.select("a[class = 'bir']")) # 通过类属性来查找 返回里面所有内容包含下级
print(bs.select("head > title")) # 通过子标签来查找
t_list = bs.select(".mnav ~ .bir") #兄弟节点 找到mnav的兄弟是bir类名的元素
print(t_list[0].get_text()) #获取第一个节点的内容
新手学习请勿喷!
欢迎各位小伙伴来我的QQ交流群一起学习 :842167453
发布的文章限制字数不够需要,这句话就是凑字数哈哈