Python beautifulsoup解析本地文件之基础语法

news/2024/7/19 8:59:13 标签: python, beautifulsoup, 爬虫, python爬虫

 视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium

beautifulsoup支持解析本地文件和网络文件,需要注意的是在实例化 BeautifulSoup 对象时,“html.parser” 是一个解析器,用于解析 HTML 代码,可以使用其他解析器,如 lxml、html5lib 等

通过 bs4 对象,可以使用多种方式来获取 HTML 中的元素信息,包括标签名、属性、文本等。

首先准备一个测试文件test.html

<html>
<head>
    <meta charset="utf-8">
    <title>python222-这是一个示例文档</title>
</head>
<body>
<p id="p1" class="content">这是一个段落。</p>
<div>
    <ul class="list">
        <li class="item">列表项1</li>
        <li class="item" id="l2">列表项2</li>
        <li class="item" id="l3">列表项3</li>
        <a href="http://www.java1234.com" class="c1">java1234</a>
    </ul>
</div>
<a href="http://www.python222.com" target="_blank" class="c2">python222</a>
<div id="d1">
    <span>
        测试内容
    </span>
</div>
</body>
</html>

bs4常用方法有find(),find_all(),select()

方法描述
.find_all()查找所有符合条件的元素
.find()查找第一个符合条件的元素
.select()使用 CSS 选择器查找元素
.children获取当前标签的直接子元素
.descendants获取当前标签的所有子孙节点
.parent获取当前标签的父节点
.parents获取当前标签的所有祖先节点
.next_sibling获取下一个同级标签
.previous_sibling获取上一个同级标签
.next_siblings获取后续所有同级标签
.previous_siblings获取前序所有同级标签
.has_attr()判断元素是否含有某个属性

bs4支持DOM标签选择器,属性选择前,层级选择器等,以及获取元素属性和节点内容

测试代码:

python">from bs4 import BeautifulSoup

# 默认打开的文件编码是gbk,我们需要设置编码
soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

# 根据标签名查找DOM节点 找到是第一个符合条件的DOM节点
# DOM DOM值  DOM标签名
print(type(soup.a), soup.a, soup.a.name)
# 获取标题的属性和属性值
print(type(soup.a.attrs), soup.a.attrs['href'])

# 获取标签内容
print(soup.p.string)

# bs4的一些常用方法
# 查找第一个符合条件的元素,支持属性条件
print(soup.find('a'))
print(soup.find('a', target="_blank"))
# class属性特殊点 关键字,所以加个下划线
print(soup.find('a', class_="c2"))

# find_all 返回一个列表
print(soup.find_all('a'))
print(soup.find_all(['a', 'p']))  # 获取多个DOM
print(soup.find_all('li', limit=2))

# select方法,使用 选择器查找元素 返回一个列表
print(soup.select('a'))  # 根据标签选择器
print(soup.select('.c2'))  # 根据类选择器
print(soup.select('#l2'))  # 根据id选择器

# 属性选择器
print(soup.select('li[id]'))  # 查找li标签中有id的DOM
print(soup.select('li[id="l3"]'))  # 查找li标签中id=l3的DOM

# 层级选择器
print(soup.select('div li'))  # 后代选择器 包括儿子和孙子等后代 多个标签名之间用空格
print(soup.select('div > ul > li'))  # 子代选择器 仅限儿子这代 多个标签名之间用 >
print(soup.select('li,p'))

# 获取节点信息
obj = soup.select('#d1')[0]
# 如果标签对象中,只有内容,那么string,get_text()都可以使用
# 如果标签对象中,除了内容还有标签,那么string就获取不到数据 而get_text()是可以获取数据
print(obj.string)
print(obj.get_text().strip())

# 节点属性获取
obj = soup.select('#p1')[0]
print(obj.name)  # 获取标签名
print(obj.attrs)  # 返回属性 字典类型
print(obj.attrs['id'])  # 获取属性值
print(obj['id'])  # 简写
print(obj.attrs.get("class")[0])  # 获取属性值
print(obj.get("class")[0])  # 简写


http://www.niftyadmin.cn/n/5134129.html

相关文章

css position属性与js滚动

“视口”就是浏览器窗口中实际显示文档内容的区域&#xff0c;不包含浏览器的“外框”&#xff0c;如菜单、工具条和标签。文档则是指整个网页。 1 css 的position static 正常定位&#xff0c;是元素position属性的默认值&#xff0c;元素遵循常规流。 relative 相对定位&…

lv8 嵌入式开发 网络编程开发 21 私有云盘项目

目录 1云盘项目简介 2 项目实现 2.1 首先实现TCP客户端、服务端 2.2 实现客户端函数简化 2.3 实现服务端函数简化 2.4 TCP数据连包现象 2.5 封装send函数和recv函数 2.6 建立readme说明 2.7 实现文件传输 2.8 读取配置文件种的ip、端口号,通过argv[1]参数实现文件传输…

目标检测与图像识别分类的区别?

目标检测与图像识别分类的区别 目标检测和图像识别分类是计算机视觉领域中两个重要的任务&#xff0c;它们在处理图像数据时有一些区别。 目标检测是指在图像中定位和识别多个目标的过程。其主要目标是确定图像中每个目标的边界框位置以及对应的类别标签。目标检测任务通常涉…

BSTree二叉树讲解

二叉搜索树的概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值…

第五章 I/O管理 一、I/O设备的基本概念和分类

目录 一、什么是I/O设备 1、定义&#xff1a; 2、按特性分类&#xff1a; 3、按传输速率分类&#xff1a; 4、按信息交换的方式分类&#xff1a; 二、总结 一、什么是I/O设备 1、定义&#xff1a; I/O设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出…

【Python 千题 —— 基础篇】列表最大值

题目描述 题目描述 给定一个包含数字的列表&#xff0c;编写一个程序&#xff0c;从列表中获取并输出最大的数字。 输入描述 输入一个包含若干数字的列表。 输出描述 程序将计算并输出列表中的最大值。 示例 示例 ① 1,2,3,2,4,8,3输出&#xff1a; 8代码讲解 下面是…

FL Studio21.2汉化免费版下载

FL studio又被国内网友称之为水果音乐制作软件21版本&#xff0c;是Image-Line公司成立23周年而发布的一个版本&#xff0c;FL studio中文版是目前互联网上最优秀的完整的软件音乐制作环境或数字音频工作站&#xff0c;FL Studio包含了编排&#xff0c;录制&#xff0c;编辑&am…

在CentOS上用yum方式安装MySQL8过程记录

此文参考官方文档一步一步记录安装到正常运行全过程 安装过程主要参考下面两边文章&#xff1a; 1.官方文档 https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html 2.linux yum安装mysql8 安装过程大概有以下几步&#xff1a; 1.查找mysql源链接 2.安装…