正则表达式在Python中的高级应用:从HTML中提取数据
正则表达式在Python中的高级应用:从HTML中提取数据
作为一名资深的Python程序员,我深知正则表达式在文本处理中的重要性。尤其是在处理HTML文档时,正则表达式可以成为我们提取数据的强大工具。在本文中,我将通过一个实际的例子,介绍如何使用正则表达式从HTML文件中提取电影排名、名称、导演和主演的信息。
引言
在Web开发和数据抓取中,经常需要从HTML文档中提取有用的信息。虽然有许多库(如BeautifulSoup)可以简化这一过程,但有时我们可能需要更灵活或更轻量级的解决方案。正则表达式提供了一种强大的方式来匹配和提取文本模式。
环境准备
首先,确保你的Python环境中已经安装了re模块。这是Python的标准库之一,用于处理正则表达式。
读取HTML文件
我们从一个名为top250.html的文件开始,假设这个文件包含了电影排名的HTML内容。
import ref = open('top250.html', mode="r", encoding="utf-8")
content = f.read()
f.close()
正则表达式的应用
编译正则表达式
为了提高效率,我们首先编译一个正则表达式,用于匹配<li>标签内的所有内容。
obj_li = re.compile(r"<li>(?P<li>.*?)</li>", re.S)
这里使用了re.S标志,它使得.匹配包括换行符在内的任何字符。
分解提取每一项内容
接下来,我们定义多个正则表达式,分别用于提取排名、名称、导演和主演的信息。
obj_rank = re.compile(r'<em class="">(?P<rank>.*?)</em>')
obj_title = re.compile(r'<span class="title">(?P<title>.*?)</span>')
obj_dao = re.compile(r'导演: (?P<dao>.*?) ')
obj_zhu = re.compile(r'主演: (?P<zhu>.*?)<br>')
obj_zhu_2 = re.compile(r'主演: (?P<zhu>.*?)<p>')
迭代提取每一项数据
我们使用finditer方法迭代匹配到的每个<li>标签,并使用定义好的正则表达式提取相关信息。
li_iter = obj_li.finditer(content)
for li in li_iter:li_code = li.group("li")rank = obj_rank.search(li_code).group("rank")title = obj_title.search(li_code).group("title")dao = obj_dao.search(li_code).group("dao")zhu1 = obj_zhu.search(li_code)if zhu1:zhu = zhu1.group("zhu")else:zhu2 = obj_zhu_2.search(li_code)if zhu2:zhu = zhu2.group("zhu")else:zhu = ""print(rank, title, zhu)
处理特殊情况
在实际应用中,HTML的结构可能会有所不同。为了应对这种情况,我们提供了多个正则表达式来匹配不同的格式。例如,主演信息可能在不同的标签中显示。
总结
通过使用正则表达式,我们可以灵活地从HTML文档中提取所需的数据。尽管这种方法在某些情况下可能不如使用专门的HTML解析库(如BeautifulSoup)直观,但它提供了一种快速、灵活且不依赖外部库的解决方案。
进一步的思考
虽然正则表达式在许多情况下非常有效,但它们也有一些局限性。例如,正则表达式不擅长处理嵌套的HTML标签。在这种情况下,使用HTML解析库可能是更好的选择。此外,正则表达式的性能也可能受到复杂度的影响,因此在处理大量数据时需要谨慎。
希望本文能够帮助你更好地理解和应用正则表达式在Python中的高级应用。如果你有任何问题或需要进一步的帮助,请随时与我联系。让我们一起探索Python编程的更多可能性!
相关文章:
正则表达式在Python中的高级应用:从HTML中提取数据
正则表达式在Python中的高级应用:从HTML中提取数据 作为一名资深的Python程序员,我深知正则表达式在文本处理中的重要性。尤其是在处理HTML文档时,正则表达式可以成为我们提取数据的强大工具。在本文中,我将通过一个实际的例子&a…...
docker compose 部署交互模式的容器-以Ubuntu为例
docker compose 部署交互模式的容器-以Ubuntu为例 问题介绍解决方式 同步发布在个人笔记docker compose 部署交互模式的容器-以Ubuntu为例 问题介绍 想通过 docker compose 方式部署一个交互模式的 Ubuntu 容器,但是以平常的方式执行部署后,发现容器被创…...
display: flex 和 justify-content: center 强大居中
你还在为居中而烦恼吗,水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它,display: flex 和 justify-content: center 都可以完成! display: flex:将元素定义为flex容器 justify-content:定义项目在主轴…...
记录贴-idea导入别人的项目
链接: IDEA导入Web项目的三种方式 链接: idea怎么导入别人的maven项目 链接: IDEA 如何导入别人的javaweb项目进行部署...
算法第九天:leetcode59.螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n 1 输出&am…...
androidkiller重编译apk失败的问题
androidkiller重编译apk失败 参考: https://blog.csdn.net/qq_38393271/article/details/127057187 https://blog.csdn.net/hkz0704/article/details/132855098 已解决:“apktool” W: invalid resource directory name:XXX\res navigation 关键是编译…...
matlab中plot的一些用法
文章目录 一、基本用法二、绘制多个数据集三、设置线型、颜色四、添加标题和标签五、添加图例六、设置轴范围七、绘制网格八、 在同一图中绘制多个子图九、绘制带误差条的图十、绘制半对数图和对数图十一、绘制填充区域图十二、综合案例 一、基本用法 x 0:0.1:10; y sin(x);…...
Elasticsearch:Retrievers 介绍 - Python Jupyter notebook
在今天的文章里,我是继上一篇文章 “Elasticsearch:介绍 retrievers - 搜索一切事物” 来使用一个可以在本地设置的 Elasticsearch 集群来展示 Retrievers 的使用。在本篇文章中,你将学到如下的内容: 从 Kaggle 下载 IMDB 数据集…...
5 webSocket
webSockets 简介 什么是 websocket webSockets 是一种先进的技术;它可以在用户的浏览器和服务器之间打开交互式通信会话;使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应 websocket 是一种网络通信协议,是HTML5开始提供的一种在单…...
PD芯片诱骗取电电压给后端小家电用电:LDR6328
在智能家居浪潮的推动下,小家电作为日常生活中不可或缺的一部分,其供电方式的创新与优化正逐步成为行业关注的焦点。随着快充技术的普及,特别是Power Delivery(PD)协议的广泛应用,一种新型供电模式——利用…...
深入解析Linux文件权限管理:掌握`chmod`和`chown`命令
深入解析Linux文件权限管理:掌握chmod和chown命令 深入解析Linux文件权限管理:掌握chmod和chown命令 大纲:摘要:内容: 1. 引言2. 理解文件权限3. 使用chmod命令4. 使用chown命令5. 综合应用6. 常见问题与解决方案7. 结…...
3.Implementing Controllers
Implementing Controllers 控制器提供了对应用程序行为的访问,这些行为通常通过一个服务接口来定义。控制器解释用户输入,并将其转换为由视图展示给用户的模型。Spring 以非常抽象的方式实现了控制器,使得你能够创建各种各样的控制器。 Spr…...
如何分清楚常见的 Git 分支管理策略Git Flow、GitHub Flow 和 GitLab Flow
Git Flow、GitHub Flow 和 GitLab Flow 是几种常见的 Git 分支管理策略,它们帮助开发团队更高效地管理代码库和协同开发。 Git Flow Git Flow 是一种功能强大的分支管理模型,由 Vincent Driessen 提出,适用于发布周期较长、需要严格管理发布…...
Java垃圾收集器选择与优化策略
1.垃圾收集算法有哪些,可以聊一下吗? 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾。如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果…...
django命令
Django 的命令行工具 django-admin(或 manage.py 中的 manage 函数)提供了一系列的命令,用于执行各种管理任务。 1. check: 检查项目的 full 路径,确保没有错误配置。 2. compilemessages: 编译 .po 文件中的翻译,生…...
23种设计模式之命令模式
命令模式 1、定义 命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作 2、命令模式结构 Command(抽象命令类):一般是…...
esp8266模块(1)
1WiFi的两种模式 1AP模式:ESP8266模块充当一个无线接入点,类似于一个路由器。(如手机开热点) 2Station模式(sta):ESP8266模块作为客户端连接到一个现有的WiFi网络。(如路由器&#…...
LDR6020:重塑iPad一体式有线键盘体验的创新力量
在移动办公与娱乐日益融合的时代,iPad凭借其强大的性能和便携性,成为了众多用户不可或缺的生产力工具。然而,为了进一步提升iPad的使用体验,一款高效、便捷的键盘成为了不可或缺的配件。今天,我们要介绍的,…...
ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段
ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段 文章目录 ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段1 构建立方贝塞尔线段 - 从坐标2 构建立方贝塞尔线段 - 从地图点3 构造立方贝塞尔线段 - 从映射点的枚举4 立方贝塞尔线段生成器属性…...
c语言之 *指针与 **指针
*n 一级指针: &nn*n自身地址指向地址指向地址值 **s 二级指针: &ss*s**s自身地址一级指针地址一级指针指向地址一级指针指向地址值 CHILD *walk, *next, *tmp_child, **scan;next walk->next scan &walk->next; while (*scan) { …...
Carla仿真实战:3种高效定位车辆生成点的方法(附代码示例)
Carla仿真实战:3种高效定位车辆生成点的方法(附代码示例) 在自动驾驶仿真开发中,精确控制车辆生成位置是构建测试场景的基础需求。许多开发者在使用Carla时都遇到过车辆"乱跑"的问题——明明指定了坐标,生成…...
nli-distilroberta-base在数据库智能查询中的应用:自然语言转SQL实战
nli-distilroberta-base在数据库智能查询中的应用:自然语言转SQL实战 1. 引言:当自然语言遇上数据库查询 "帮我找出上个月销售额超过10万的产品"——这样的需求如果能让数据库直接理解该多好?传统SQL查询需要专业技术人员编写复杂…...
YOLOv8在智慧农业中的落地实践:如何提升植物病害检测准确率到90%+
YOLOv8在智慧农业中的落地实践:如何提升植物病害检测准确率到90% 在智慧农业领域,植物病害的早期识别与精准诊断一直是技术攻关的重点。传统人工检测方式不仅效率低下,而且受限于专家经验,难以实现规模化应用。随着计算机视觉技术…...
FUTURE POLICE赋能在线教育:AI助教自动批改口语作业
FUTURE POLICE赋能在线教育:AI助教自动批改口语作业 每次上完英语口语课,最头疼的是什么?对很多学生来说,是等待老师批改作业的漫长过程,还有那千篇一律的“发音不错,继续努力”的反馈。对老师而言&#x…...
模型微调加持:百川2-13B+OpenClaw定制化个人助手实践
模型微调加持:百川2-13BOpenClaw定制化个人助手实践 1. 为什么需要定制化个人助手? 去年我尝试用现成大模型搭建自动化助手时,发现一个尴尬现象:当我让AI帮我整理会议纪要时,它总把技术术语解释得像科普读物…...
AMD平台黑苹果智能配置引擎:从技术困境到自动化解决方案的完整指南
AMD平台黑苹果智能配置引擎:从技术困境到自动化解决方案的完整指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在传统黑苹果配置领域&…...
Python实战:用NumPy实现酉矩阵的生成与验证(附完整代码)
Python实战:用NumPy实现酉矩阵的生成与验证(附完整代码) 在量子计算、信号处理和机器学习等领域,复数矩阵运算正变得越来越重要。酉矩阵(Unitary Matrix)作为复数域上的"正交矩阵",保…...
NSSM神器:一键将任意应用注册为Windows服务并实现日志自动分割
NSSM实战指南:将Windows应用转化为可靠系统服务的完整方案 在Windows服务器运维和开发过程中,我们经常需要确保关键应用程序能够持续稳定运行,即使系统重启或用户注销也不受影响。传统方式下,开发者通常需要编写复杂的服务包装代码…...
别再傻傻克隆了!Conda 4.14+ 一键重命名虚拟环境的正确姿势(附版本检查)
Conda虚拟环境重命名终极指南:从版本检查到高效实践 在Python开发中,虚拟环境管理是每个开发者必备的核心技能。作为最流行的Python环境管理工具之一,Conda在4.14版本引入了一个革命性功能——直接重命名虚拟环境。这个看似简单的改进&#…...
图像标注难题如何破解?LabelImg工具全面解析与实战指南
图像标注难题如何破解?LabelImg工具全面解析与实战指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out L…...
