利用BS4的select及find_all查找HTML常见的元素和属性

news/2024/7/27 8:19:13/文章来源:https://blog.csdn.net/book_dw5189/article/details/137158961

BeautifulSoup是一个用于Python的HTML和XML解析库。它可以帮助您轻松地从HTML和XML文档中提取数据,处理文档结构和解析标签。BeautifulSoup库的主要优点是它的易用性和简洁的API,使得处理复杂的HTML和XML文档变得简单。

from bs4 import BeautifulSoup
import requests# 发送HTTP请求并获取HTML文档
response = requests.get("https://xxx.com")
html_doc = response.text# 使用BeautifulSoup解析HTML文档
soup = BeautifulSoup(html_doc, "html.parser")# 编译一个匹配电子邮件地址的正则表达式模式
email_pattern = re.compile(r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+")# 使用find_all方法查找所有匹配电子邮件地址的a标签
email_tags = soup.find_all("a", href=email_pattern)# 遍历结果并打印电子邮件地址
for tag in email_tags:email = tag.get("href")print(email)
select(selector) 方法是BeautifulSoup中一个强大的功能,它允许你使用CSS选择器来查找HTML元素。它接受一个CSS选择器作为参数,并返回一个生成器,包含匹配的标签。这个方法非常有用,因为它允许你使用熟悉的CSS语法来查找和操作HTML元素。

CSS选择器可以是元素选择器、类选择器、ID选择器、属性选择器等。以下是一些例子:

  • 元素选择器:选择具有指定标签名的所有元素。
from bs4 import BeautifulSoup
html = "<html><head><title>Hello</title></head><body><h1>Hello</h1><p>Hello</p></body></html>"
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select('h1')
print(tags)
  • 类选择器:选择具有指定类名的所有元素。
from bs4 import BeautifulSoup
html = "<html><head><title>Hello</title></head><body><h1 class='header'>Hello</h1><p class='content'>Hello</p></body></html>"
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select('.header')
print(tags)
  • ID选择器:选择具有指定ID的元素。
from bs4 import BeautifulSoup
html = "<html><head><title>Hello</title></head><body><h1 id='main'>Hello</h1><p>Hello</p></body></html>"
soup = BeautifulSoup(html, 'html.parser')
tag = soup.select('#main')
print(tag)
  • 属性选择器:选择具有指定属性的元素。
from bs4 import BeautifulSoup
html = "<html><head><title>Hello</title></head><body><h1 class='header' id='main'>Hello</h1><p class='content'>Hello</p></body></html>"
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select('[class="header"]')
print(tags)

 --------------------

find_all(name, attrs, recursive, text, limit) 方法是BeautifulSoup中一个强大的功能,它可以根据不同的条件来查找HTML元素。这个方法接受多个可选参数,使你能够更加灵活地查找HTML元素。下面是一个全面的解释:
  1. name: 这个参数可以是一个字符串(表示要查找的标签名)或者一个列表(表示要查找的多个标签名)。如果提供了这个参数,find_all 方法将只返回名称匹配的元素。
  2. attrs: 这个参数可以是一个字典(表示属性名和属性值的映射)或者一个列表(表示多个属性名)。如果提供了这个参数,find_all 方法将只返回满足属性条件的元素。
  3. recursive: 如果设置为True,则在当前标签的子标签中查找元素。默认值为False。这个参数可以是一个布尔值。
  4. text: 这个参数可以是一个字符串(表示要查找的文本)或者一个列表(表示多个要查找的文本)。如果提供了这个参数,find_all 方法将只返回包含匹配文本的元素。
  5. limit: 这个参数用于限制查找结果数量。返回的生成器中的元素数量不会超过指定的数量。

例如,要查找所有的h1标签,所有具有class="header"属性的h1标签,以及所有包含文本"World"h1标签,可以使用以下代码:

from bs4 import BeautifulSoup
html = "<html><head><title>Hello</title></head><body><h1>Hello</h1><h1 class='header'>World</h1><h1>Hello</h1></body></html>"
soup = BeautifulSoup(html, 'html.parser')# 查找所有的h1标签
h1_tags = soup.find_all('h1')
print(h1_tags)# 查找所有具有class="header"属性的h1标签
header_h1_tags = soup.find_all('h1', attrs={'class': 'header'})
print(header_h1_tags)# 查找所有包含文本"World"的h1标签
world_h1_tags = soup.find_all('h1', text='World')
print(world_h1_tags)
  •  处理HTML文档中的表格数据
from bs4 import BeautifulSoup
html = "<table><tr><td>1</td><td>Two</td></tr><tr><td>Three</td><td>4</td></tr></table>"
soup = BeautifulSoup(html, 'html.parser')# 查找所有的表格单元格
table_cells = soup.find_all('td')
for cell in table_cells:print(cell.text)
  • 处理HTML链接:

要处理HTML中的链接,你可以使用find_all方法来查找所有的a标签。然后,你可以遍历查找到的链接列表,并提取链接的URL和文本内容。

from bs4 import BeautifulSoup
html = "<a href='https://www.example.com'>Example</a><a href='https://www.test.com'>Test</a>"
soup = BeautifulSoup(html, 'html.parser')# 查找所有的链接
links = soup.find_all('a')
for link in links:print(link.get('href'), link.text)
  • 处理HTML图像:

要处理HTML中的图像,你可以使用find_all方法来查找所有的img标签。然后,你可以遍历查找到的图像列表,并提取图像的src属性值。

from bs4 import BeautifulSoup
html = "<img src='https://www.example.com/image1.jpg' alt='Image 1'><img src='https://www.example.com/image2.jpg' alt='Image 2'>"
soup = BeautifulSoup(html, 'html.parser')# 查找所有的图像
images = soup.find_all('img')
for image in images:print(image.get('src'))
  •  正则表达式,find_all方法可以结合正则表达式来查找满足特定条件的HTML元素。在find_all方法中,你可以使用re模块的re.compile()函数来编译正则表达式,然后将编译后的正则表达式作为find_all方法的第一个参数。
import re
from bs4 import BeautifulSouphtml = "<a href='https://www.example.com'>Example</a><a href='https://www.test.com'>Test</a>"
soup = BeautifulSoup(html, 'html.parser')# 使用正则表达式编译一个匹配所有URL的模式
url_pattern = re.compile(r'https://www\.[\w.-]+')# 使用find_all方法查找所有满足正则表达式条件的a标签
links = soup.find_all('a', href=url_pattern)for link in links:print(link.get('href'), link.text)
import re
from bs4 import BeautifulSouphtml = "<a href='https://www.example.com'>Example</a><a href='https://www.test.com'>Test</a>"
soup = BeautifulSoup(html, 'html.parser')# 使用正则表达式编译一个匹配包含"Example"的文本的模式
example_pattern = re.compile(r'Example')# 使用find_all方法查找所有包含"Example"的a标签
links_with_example = soup.find_all('a', text=example_pattern)for link in links_with_example:print(link.get('href'), link.text)
import re
from bs4 import BeautifulSouphtml = "<div class='example'>Div 1</div><div class='test'>Div 2</div><div class='example example-2'>Div 3</div>"
soup = BeautifulSoup(html, 'html.parser')# 使用正则表达式编译一个匹配包含"example"的class属性值的模式
example_pattern = re.compile(r'example')# 使用find_all方法查找所有包含"example"的class属性值的div标签
divs_with_example = soup.find_all('div', class_=example_pattern)for div in divs_with_example:print(div.get('class'), div.text)

--------------------- 

BeautifulSoup是一个用于解析HTML和XML文档的Python库,它提供了许多有用的方法来处理和操作文档中的元素。以下是BeautifulSoup的一些常用关键方法:

1. `find(name, attrs, recursive, text, limit)`: 查找文档中第一个满足条件的元素。
2. `find_all(name, attrs, recursive, text, limit)`: 查找文档中所有满足条件的元素。
3. `get_text(strip=True, separator=None)`: 提取文档中所有文本内容,并将它们连接成一个字符串。
4. `prettify(from_encode=None, to_encode=None, indent_increase=0, keep_whitespace=True, maximize_viewport_breadth=False)`: 将HTML或XML文档格式化成可读的字符串。
5. `select(selector)`: 使用CSS选择器查找文档中的元素。
6. `string`: 获取当前元素的文本内容。
7. `attrs`: 获取当前元素的属性字典。
8. `append(child)`: 向当前元素添加子元素。
9. `insert(index, child)`: 在指定位置插入子元素。
10. `delete()`: 从当前元素中删除所有子元素。
11. `unwrap()`: 移除当前元素的父元素。
12. `name`: 获取当前元素的标签名称。
13. `tag`: 获取当前元素的标签名称。
14. `parent`: 获取当前元素的父元素。
15. `children`: 获取当前元素的子元素列表。
16. `soup`: 获取包含当前元素的Soup对象。
17. `contents`: 获取当前元素的子元素列表,不包括文本节点。
18. `descendants`: 获取当前元素的所有后代元素列表。
19. `find_parent(name)`: 查找当前元素的父元素,如果父元素的标签名称匹配给定的名称,则返回父元素。
20. `find_parents(name)`: 查找当前元素的祖先元素,如果祖先元素的标签名称匹配给定的名称,则返回祖先元素。
21. `is_descendant(ancestor)`: 判断当前元素是否是给定祖先元素的后代。
22. `is_ancestor(descendant)`: 判断当前元素是否是给定后代元素的祖先。
23. `match`: 使用正则表达式匹配文档中的元素。

--------

HTML(HyperText Markup Language)是用于创建网页内容的标准标记语言。HTML元素和属性是构成HTML文档的基本组成部分。下面是一些常见的HTML元素和属性:

**元素**:

1. `<!DOCTYPE>`:定义文档类型和版本
2. `<html>`:页面的根元素
3. `<head>`:包含文档元数据、文档标题、链接到样式表等内容的元素
4. `<title>`:文档标题
5. `<body>`:包含文档内容的元素
6. `<h1>` 至 `<h6>`:文档标题的六个级别
7. `<p>`:段落
8. `<br>`:换行
9. `<hr>`:水平线
10. `<a>`:超链接
11. `<img>`:图像
12. `<ul>`:无序列表
13. `<ol>`:有序列表
14. `<li>`:列表项
15. `<table>`:表格
16. `<tr>`:表格行
17. `<th>`:表格标题单元格
18. `<td>`:表格单元格
19. `<div>`:用于组合HTML内容和样式的容器
20. `<span>`:内联容器,用于组合HTML内容和样式
21. `<form>`:表单
22. `<input>`:表单输入控件
23. `<textarea>`:多行文本输入控件
24. `<button>`:按钮
25. `<select>`:下拉列表
26. `<option>`:下拉列表项
27. `<iframe>`:内嵌框架
28. `<meta>`:文档元数据
29. `<link>`:链接到外部资源,如样式表
30. `<script>`:用于包含JavaScript代码的元素
31. `<style>`:用于包含CSS样式的元素
32. `<noscript>`:用于包含不支持脚本的浏览器时显示的内容
33. `<canvas>`:用于绘制动态图形的画布
34. `<audio>`:用于播放音频的元素
35. `<video>`:用于播放视频的元素
36. `<embed>`:用于嵌入外部应用程序或插件的元素

**属性**:

1. `class`:用于指定元素的CSS类
2. `id`:用于指定元素的唯一ID
3. `href`:用于指定`a`标签的链接地址
4. `src`:用于指定`img`、`audio`、`video`和`iframe`等元素的来源
5. `alt`:用于指定`img`元素的替代文本
6. `title`:用于指定元素的文档标题
7. `type`:用于指定`input`元素的类型,如文本、密码、checkbox等
8. `name`:用于指定`form`元素中的输入控件名称
9. `value`:用于指定`input`元素的初始值
10. `rows`:用于指定`textarea`元素的行数
11. `cols`:用于指定`textarea`元素的列数
12. `charset`:用于指定HTML文档的字符集
13. `charset`:用于指定`meta`元素的字符集
14. `hreflang`:用于指定`link`元素的语言代码
15. `crossorigin`:用于指定`img`、`audio`和`video`元素的跨域资源共享(CORS)设置
16. `controls`:用于指定`video`和`audio`元素是否显示播放控件
17. `loop`:用于指定`audio`和`video`元素是否自动播放并循环播放
18. `autoplay`:用于指定`audio`和`video`元素是否自动播放
19. `preload`:用于指定`audio`和`video`元素是否在加载页面时预加载
20. `muted`:用于指定`audio`和`video`元素是否静音
21. `poster`:用于指定`video`元素的前景图像
22. `width`:用于指定`img`、`iframe`和`video`元素的宽度
23. `height`:用于指定`img`、`iframe`和`video`元素的高度
24. `cellpadding`:用于指定`table`元素单元格的内边距
25. `cellspacing`:用于指定`table`元素单元格之间的间距
26. `cellborder`:用于指定`table`元素单元格边框是否可见
27. `align`:用于指定`table`、`img`和`hr`元素的对齐方式
28. `border`:用于指定`table`元素单元格边框的宽度
29. `cellmerg`:用于指定`table`元素单元格是否合并
30. `colspan`:用于指定`th`和`td`元素可以占用多个列
31. `rowspan`:用于指定`th`和`td`元素可以占用多个行
32. `scope`:用于指定`th`元素的作用域(row、col、rowgroup或colgroup)
33. `abbr`:用于指定`abbr`元素的缩写和完整形式
34. `cite`:用于指定`abbr`元素的完整形式的来源
35. `datetime`:用于指定`time`元素的日期和时间
36. `pubdate`:用于指定`time`元素的发布日期
37. `duration`:用于指定`time`元素的持续时间
38. `datatype`:用于指定`time`元素的数据类型
39. `decode`:用于指定`base`元素的编码
40. `href`:用于指定`base`元素的基础URL
41. `target`:用于指定`a`、`form`和`area`元素的目标窗口或框架
42. `media`:用于指定`link`元素的适用设备类型
43. `sizes`:用于指定`img`元素的可选尺寸列表
44. `usemap`:用于指定`img`元素的图像地图
45. `ismap`:用于指定`img`元素是否是图像地图
46. `role`:用于指定`a`、`area`、`button`、`img`和`summary`元素的角色
47. `tabindex`:用于指定表单元素的Tab键顺序
48. `contenteditable`:用于指定`div`和`span`元素是否可编辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1033331.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS应用开发之Native与ArkTS对象绑定

场景介绍 通过napi_wrap将ArkTS对象与Native的C对象绑定&#xff0c;后续操作时再通过napi_unwrap将ArkTS对象绑定的C对象取出&#xff0c;并对其进行操作。 使用示例 接口声明、编译配置以及模块注册 接口声明 // index.d.ts export class MyObject {constructor(arg: num…

第十八章 算法

一、介绍 1.1 什么是算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制。也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获…

微软开源的面向初学者的生成式人工智能课程

介绍 微软开源了一套面向初学者的生成人工智能课程&#xff0c;旨在通过18节课教我们开始构建生成式AI应用程序所需知道的一切。 课程设置&#xff1a; 序号课程1生成式AI和大语言模型导论2探索和比较不同的大语言模型3使用生成式AI4理解提示词工程基础5创建高级提示词6构建…

VSCode - 离线安装扩展python插件教程

1&#xff0c;下载插件 &#xff08;1&#xff09;首先使用浏览器打开 VSCode 插件市场link &#xff08;2&#xff09;进入插件主页&#xff0c;点击右侧的 Download Extension 链接&#xff0c;将离线安装包下载下来&#xff08;文件后缀为 .vsix&#xff09; 2&#xff0c;…

EyouCMS换服务器网站内页出现大量404页面(已解决)

换了服务器后打开网站&#xff0c;内页全部显示404吓死人&#xff0c;去网上查发现是伪静态设置问题&#xff0c;今天就把这个设置方法交给大家&#xff01; 第一步&#xff0c;宝塔面板找到伪静态然后选中THINKPHP 第二步&#xff0c;登录官网后台&#xff0c;清除网站后台缓…

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

问题2-前端json数组数据转换成csv文件

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>将 JSON 数据导出为 CSV 文件</title> …

用html实现一个日历便签设计

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>日历便签设计</title><link hrefhttps://fonts.googleapis.com/css?familyMontserrat:700,400 relstylesheet typetext/css><link hr…

IDEA2023使用手册 【持续更新...】

IDEA介绍 IDEA官网&#xff1a;https://www.jetbrains.com.cn/idea/IDEA 2023.2.2下载地址&#xff1a;https://download.jetbrains.com/idea/ideaIU-2023.2.2.exe对第三方软件的支持&#xff1a;https://www.jetbrains.com/legal/third-party-software/?productiiu&versi…

docker基础学习指令

文章目录 [toc] docker基础常用指令一、docker 基础命令二、docker 镜像命令1. docker images2. docker search3. docker pull4. docker system df5. docker rmi1. Commit 命令 三、 docker 容器命令1. docker run2. docker logs3. docker top4. docker inspect5. docker cp6. …

15 - grace序列处理 - 十三点滑动平均法

grace序列处理 -十三点滑动平均法 滑动平均是一种常用的平滑数据的方法,可以用于去除噪声或者提取趋势。十三点滑动平均是指使用窗口大小为13的滑动平均,应用于GRACE序列处理中可以去除周年项的影响。 十三点滑动平均的计算公式为: y [ n ] = ( x [ n − 6 ]

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

pygame 3d三角形沿y轴旋转后 透视投影在屏幕上

import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 1), (100, 200, 0), (300, 100, 1)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…

redis系列之踩坑:\xAC\xED\x00\x05t\x00\x08乱码问题

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

尾矿库在线安全监测:提升矿山安全水平

在矿山安全领域&#xff0c;尾矿库的安全管理尤为关键。尾矿库作为矿山生产链条的重要环节&#xff0c;其稳定性不仅关系到生产活动的持续进行&#xff0c;更直接影响着周边环境和人民群众的生命财产安全。因此&#xff0c;尾矿库的安全监测显得尤为重要。近年来&#xff0c;随…

AcWing刷题-游戏

游戏 DP l lambda: [int(x) for x in input().split()]n l()[0] w [0] while len(w) < n:w l()s [0] * (n 1) for i in range(1, n 1): s[i] s[i - 1] w[i]f [[0] * (n 1) for _ in range(n 1)]for i in range(1, n 1): f[i][i] w[i]for length in range(2, …

简介:商业BRD+市场MRD=产品PRD

前言 产品需求文档Product Requirements Document,PRD是将商业需求文档&#xff08;BRD&#xff09;和市场需求文档&#xff08;MRD&#xff09;用更加专业的语言进行描述。 产品经理对用户价值的体现&#xff0c;产品经理对商业价值的体现&#xff0c;能改变世界的产品经理&…

Quartz.Net详解(定时任务和调度)

http://t.csdnimg.cn/Jinaphttp://t.csdnimg.cn/Jinap

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…

docker-compse安装es(包括IK分词器扩展)、kibana、libreoffice

Kibana是一个开源的分析与可视化平台&#xff0c;设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。 Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的展示数据&#xff0c;从而达到高级的数据…