正则表达式在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) { …...
navicat 导入 sql 遇到的问题
错误1 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS tmp_tables; CREATE TABLE at line 1 [Err] &…...
压缩pdf大小的方法 指定大小软件且清晰
在数字化时代,pdf文件因其良好的兼容性和稳定性,已成为文档分享的主流格式。然而,高版本的pdf文件往往体积较大,传输和存储都相对困难。本文将为您详细介绍几种简单有效的方法,帮助您减小pdf文件的大小,让您…...
PHP上门按摩专业版防东郊到家系统源码小程序
💆♀️【尊享级体验】上门按摩专业版,告别东郊到家,解锁全新放松秘籍!🏠✨ 🔥【开篇安利,告别传统束缚】🔥 亲们,是不是厌倦了忙碌生活中的疲惫感?想要享…...
从微软发iPhone,聊聊企业设备管理
今天讲个上周的旧闻,微软给员工免费发iPhone。其实上周就有很多朋友私信问我,在知乎上邀请我回答相关话题,今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身,而是更想聊聊事件的主要原因——微软企业设备管理࿰…...
抖音/腾讯/百度ocpm深度回传如何操作?广告投放双出价的投放技巧?
要实现抖音、腾讯和百度的OCPM(Optimized Cost Per Mille)深度回传,可以通过借助第三方平台,例如(转化宝)实现广告数据精准回传,如此之外,在广告投放过程中还需要注重这些方面。 转化…...
DPKG(Debian / Ubuntu包管理工具)的深入探索与使用
DPKG(Debian / Ubuntu包管理工具)的深入探索与使用 在Linux世界中,特别是基于Debian及其衍生系统(如Ubuntu)的环境中,dpkg是管理Debian软件包(.deb文件)的核心工具。它不仅用于安装…...
Godot学习笔记2——GDScript变量与函数
Godot使用的编程语言是GDS,语法上与python有些类似。 一、代码编写界面 在新建的Godot项目中,点击“创建根节点”中的“其他节点”,选择“Node”。 点击场景界面右上角的绿色加号,路径处重新命名,模板选择“Empty”&…...
golang开发环境搭建与踩坑记录
文章目录 一、安装下载1、go环境2、ide 二、基本使用1、运行2、结构体与方法函数指针3、闭包4、指针5、map6、接口7、异常 三、包管理1、go mod语法2、项目下载所有依赖 一、安装下载 1、go环境 下载地址:https://go.dev/dl/ 或者:https://golang.goog…...
单机、集群、分布式服务器比较:
1. 单机服务器的瓶颈: 单机服务器:一台服务器独立运行一个工程所需的全部的业务模块 受限于服务器硬件资源,所承受用户并发量受限,32位linux操作系统最大并发量为两万任一模块的变动和修改,都会导致整个项目代码重新编…...
NoSql选择题解
1. (单选题)以下不属于ACID原则的是( )。 A. 相对性 B. 原子性 C. 隔离性 D. 持久性 正确答案: A :相对性; 2. (单选题)以下NoSQL数据库中,哪个是内存数据库()。 A. Bigtable B. Redis C. Hbase D. MongoDB 正确答案: B :Redis; …...
一个服务器多个网站好吗/搜索关键词分析
探索Yocto、Buildroot、OpenWRT和经过修改的桌面发行版,选择适合您的项目的选项。致谢:翻译自https://opensource.com/article/18/6/embedded-linux-build-tools越来越多的的设备开始使用Linux系统,比Linus Torvalds在他的宿舍里工作的设备要…...
wordpress 做app分销/河南整站关键词排名优化软件
💪 此篇主要记录一些校招杂题,春招结束前会一直更新💪1、请列举出在JDK中几个常用的设计模式2、什么是设计模式3、单例模式4、工厂模式5、装饰器模式6、观察者模式7、Java中IO流的分类?说出几个你熟悉的实现类7.1、字节输入流和字…...
哪个网站专门做灵异文/新产品宣传推广策划方案
360主机卫士 for Linux是专为CentOS、Ubuntu、Redhat等操作系统打造的安全辅静默工具,可以有效地保护服务器的安装,让网站处门无处可藏,兼容Apache、Nginx等系列的服务器环境。360主机卫士linux安装教程:1.1 必要环境1)curl (通过…...
企业买好域名后怎么做网站/百度推广代理商利润
appstore上架后搜不到APP 修改定价 将你的app定价修改成0.99刀 修改你的发行范围,全取消后只选中国。 save 这时候你的app status将会变成pending contract。 将之前的修改都改回来,修改定价free,全选区域,然后save 这时候app…...
攀枝花市住房和城乡建设局网站/爱用建站官网
canvas的绘制是以画布大小为准的。 canvas的默认画布大小为300150。 设置canvas画布大小的方法: // 方法一 <canvas id"test" width"100px" height"100px"></canvas>// 方法二 <canvas id"test"></…...
wordpress 锚文点/贺贵江seo教程
题意:丑数就是质因子只有2,3,5 ,7,的数,另外1也是丑数。求第n(1<n<5842)个丑数,n0,结束。 思路:根据丑数的定义,丑数应该是另一个丑数乘以2、3、5或者7…...