Python Bs4补充

90 阅读2分钟
# -*- 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

发布的文章限制字数不够需要,这句话就是凑字数哈哈