HTML::Parser 简单解释

python:html.parser --- 简单的 HTML 和 XHTML 解析器 阅读详情

HTML::Parser 简单解释

Category: Modules   Keywords: HTML:;Parser

HTML::Parser 是一个非常强大的用于处理 html 解析的模块。

HTML::Parser 的文档没有一个完整的例子。所以我就把下面的我写在 ShellWeb 里的例子摘取出来,并简单的解释一下。

 

use HTML::Parser;

my $parser = HTML::Parser->new( api_version => 3,
   start_h => [/&start, "self, tagname, attr, text"],
   text_h => [/&text, "self, dtext"],
   end_h => [/&end, "self, tagname"],
   ignore_elements => [qw(script style)],
);

$parser->parse($content);

new 用于建立实例,api_version => 3 用于指定版本,因为 HTML::Parser 还有老的版本 2,可能以后还会有新的版本。而不同的版本有不同的 API, 所以指定这个是必须的。
start_h, text_h, end_h 是三个事件处理过程。分别对应标签的开始,文字(就是没有标签的地方但不包括注释等),标签的关闭。

其实完整的事件处理包括 text, start, end, declaration, comment, process, start_document, end_document 和 default.
一般用到的只有 text start end.

 

  • 指定事件所对应的处理方法和参数有如下几种方法:
  • 第一种就是如上面所看到的,在事件后面加上 _h, 如 text_h, start_h 这样。
  • 第二种也是在 new 里做为参数。
    $p = HTML::Parser->new(api_version => 3,
    handlers => { text => [/@array, "event,text"],
    comment => [/@array, "event,text"],
    });
    用 handlers 来定义。
  • 第三种是在 new 里不定义,在后面用 handler 来定义。
    $p = HTML::Parser->new(...);
    $p->handler(start => /&start, 'attr, attrseq, text' );
这三者接受参数的方法是一样的。第一个为处理方法,第二个为参数。
完整的参数参考 perldoc HTML::Parser
最最常用的为 self, tagname, attr, text
不过注意的是不同的事件有不同的参数限制。如果 start 事件可以有 attr 但是 end 事件就没有 attr 了。(因为结束标签里是不会有属性的。)

如最开始的例子中我们使用了 start_h => [/&start, "self, tagname, attr, text"],
那么接下来我们就定义我们自己的 start 子程序:

sub start {
   my ($self, $tag, $attr, $text) = @_;
   if ($tag eq 'img') {
       $buffer->insert($iter, "[IMG - $attr->{src}]");
   } elsif ($tag eq 'pre') {
       $self->{'_pre'} = 1;
   } elsif ($tag eq 'title') {
       $self->{'_tilte'} = 1;
   } else {
       $buffer->insert($iter, $text);
   }
}
start 子程序的第一行就是 start_h => [/&start, "self, tagname, attr, text"], 后面所对应的参数。分别对照为 self, 标签名(如 a/img 等),属性(这是一个散列,比如 img 必定有 $attr->{src}),text 指的是整个标签的完整原始内容。
看起来就是这么简单。接下来定义 text end 子程序:
sub text {
   my ($self, $text) = @_;
   $text =~ s//r/n//sg unless ( defined($self->{'_pre'}) );
   if ( defined($self->{'_tilte'}) ) {
       $window->set_title("$text - ShellWeb");
   } else {
       $buffer->insert($iter, $text);
   }
}

sub end {
   my ($self, $tag) = @_;
   if ($tag eq 'li') {
       $buffer->insert($iter, "/n");
   } elsif ($tag eq 'p') {
       $buffer->insert($iter, "/n");
   }
   $self->{'_tilte'} = undef if ($tag eq 'title');
   $self->{'_pre'} = undef if ($tag eq 'pre');
}

这个完整的程序中间我们加了一点点小小的技巧。因为 text 事件是不知道这个文本外面的标签名的(也就是 text_h 没有 tagname 参数)。
这样我们必须在 title/pre 标签的开始时用 $self->{'_title'} 保存它开始了,在 end 时将它释放。
这样我们就在 text 事件中知道刚文本是不是包围在 title 或 pre 里面。

上面就是大致的 HTML::Parser 分析过程。最重要的是实践,自己设定个结果,然后用 HTML::Parser 实现它。
实现不了出了问题看 perldoc HTML::Parser 或者给我发 mail. ;-)

 
Jericho HTML Parser:Java中的HTML文档解析利器 假设我们有一个任务,需要从多个网页中提取产品信息,并将其迁移到新的电子商务平台。 阅读详情

相关推荐

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由下keep-alive缓存失效的根本原因,并提供了三种实战解决方案:通过路由扁平化根治问题、利用状态管理精细模拟缓存效果,以及借助keep-alive-vue3插件快速修复。文章旨在帮助开发者彻底理解Vue Router与keep-alive的协作机制,从而根据项目情况选择最佳策略,有效解决页面状态丢失的难题。

weixin_29015801的博客 285

Perl 的 html 解析模块

HTML::TreeBuilder这个解析模块使用了强大的 HTML::Element 模块。解析时,HTML::TreeBuilder模块把整个 html 文档转换成了 perl 的数据结构,可以进行任意的操作。使用时先创建一个 HTML::TreeBuilder 对象。use Data::Dumper qw(Dumper);$Data::Dumper::Indent = 1;use HTML:

cnki_ok的专栏 2037

iOS 取证窍门:为什么要先从 Recovery 恢复模式开始?

未记录的 DFU 代表“设备固件升级”。与专为普通用户设计的恢复模式不同,DFU 模式从来都不是为公众设计的。Apple 知识库中的任何地方都没有关于 DFU 的文档。进入 DFU 的方法主要是通过按下、按住和释放按钮的复杂操作序列,并具有精确的时间限制。在多个步骤中的任何一个步骤中,如果时间错误,都会导致重新启动设备,而不是将其切换到 DFU。另外,设备屏幕上也没有 DFU 模式的指示。如果设备成功切换到 DFU,显示屏将保持黑色。即使对于专家来说,进入 DFU 模式也可能很困难。恢复模式是最容易解释的。

2302_82041293的博客 1198

perl 安装html,centos perl 安装HTML-Parser时报错

新装了centos7,安装perl模块时,发现系统自带的perl很多基础的包都没安装(是基础perl的阉割版本,甚至失去了很多重要的基础包http://www.perlmonks.org/?node_id=486526),比如ExtUtils::MakeMaker,ExtUtils::ParseXS,ExtUtils::Embed等很多基础包都没有,因为自己熟知自定perl包的安装方法,所以很...

weixin_28736335的博客 585

Android T GPS 定位流程

Gps 定位

好记性不如烂笔头 1355

从IPv6到Tomcat:彻底解决127.0.0.1拒绝连接的完整指南

本文提供了从IPv6到Tomcat的全面指南,帮助开发者彻底解决127.0.0.1拒绝连接的问题。涵盖网络协议栈、服务配置、端口管理等多个层面的排查方法,特别针对Tomcat服务提供了专项解决方案,确保开发者能够快速定位并修复连接问题。

weixin_29207439的博客 472

HTML.parser和正则解析,Python HTML解析模块HTMLParser用法分析【爬虫工具】

本文实例讲述了Python HTML解析模块HTMLParser用法。分享给大家供大家参考,具体如下:简介先简略介绍一下。实际上,HTMLParser是python用来解析HTML的内置模块。它可以分析出HTML里面的标签、数据等等,是一种处理HTML的简便途径。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序...

weixin_35120666的博客 990

习题6-3 使用函数输出指定范围内的完数

其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[mn]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。

cutto的博客 863

【Python】Parser 用法-通俗易懂!

AssertionError: Please activate one of the 实例化ArgumentParser 使用add_argument函数添加参数 add_argument() 方法定义如何解析命令行参数 使用parse_args解析参数 案例实践:action的可选参数store_true的作用 报错AssertionError: Please activate one of the

MengYa_Dream的博客 6万+

MATLAB/simulink电力系统之变压器仿真+变压器饱和仿真+空载变压器电流畸变原因及仿真+空载合闸励磁涌流仿真+simulink免费仿真资源

单相变压器空载运行时,原边电流主要用来产生主磁场,而电路损耗和铁芯损耗很小,因此即使外加电压很大,空载电流仍然很小。如果想观察某个相对磁导率下电感系数的数值,可以在程序中增加这样的语句,比如,在程序中end语句之后,加上L(100),运行程序后就可以得到相对磁导率为 100时的电感系数值。在交流铁芯线圈中,当交变磁通按照正弦规律变化时,受到磁路饱和的影响,线圈中的电流会发生畸变,并成为尖顶波,这就是所谓的交流磁路电流畸变。需要指出,铁芯内的主磁通Ф可以通过空载时的副边电压从来测量,两者之间的数学关系,即。

m0_37724753的博客 4230

python音频信号分析

声音以具有诸如频率、带宽、分贝等参数的音频信号的形式表示,典型的音频信号可以表示为幅度和时间的函数

MAY的博客 2785

Parser 使用方法

本文主要记录了在深度学习中,使用别人写的代码时,用来接收用户在命令行里指定传入模型参数的重要方法parser同时,本文也给出了简易的示例,方便读者快速开始(只想了解如何使用的话可以直接跳到3. 使用方法和4. 示例一份简单的使用说明参考文档参考博客。

BUPTer 6369

基于Simulink的无迹卡尔曼滤波(UKF)SOC高精度估计仿真

本文介绍了基于Simulink的无迹卡尔曼滤波(UKF)在电池SOC高精度估计中的应用。通过无迹变换替代传统EKF的线性化过程,UKF显著提升了SOC估计精度,在强非线性工况下误差可控制在0.5%以内。文章详细阐述了UKF的核心原理,包括Sigma点生成、状态预测和观测更新等关键步骤,并基于Thevenin等效电路模型构建了完整的UKF SOC估算系统。通过Simulink建模和仿真验证,展示了UKF在大电流脉冲、变温工况等复杂场景下的优异性能,其动态响应时间小于30ms,长期累积误差低于0.7%。研究为储

amy_mhd的博客 125

Python 库手册:html.parser HTML 解析模块

html.parser 是 Python 标准库中用于解析 HTML 文件的模块,提供了一个基础类 HTMLParser,通过继承并重写其方法,可以提取网页中的标签、属性与文本内容。这是一个基于事件驱动(event-driven)的类,它会在遇到 HTML 标签时触发对应的处理方法(如 handle_starttag()、handle_data() 等),你需要通过继承它并重写这些方法来自定义行为。在某些流式解析场景中,.close() 可用于标记输入结束并清理状态,但通常 .feed() 足以完成解析。

qq_41176800的博客 1316

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

xberg 批处理提取 API 实战:基于 C FFI 的 extract_batch 字节批量抽取

本文围绕 xberg 仓库中的契约测试文档 [api_extract_batch_bytes.md](https://link.gitcode.com/i/4c565fbea58e431167772bf7cdf7886c) 展开,深入讲解 xberg 面向 C 语言暴露的批量提取接口 `xberg_extract_batch`:如何以一段 JSON 字符串一次性提交多个"字节输入"(bytes 输

gitblog_00793的博客 890

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

探索React HTML Parser:将HTML转换为React组件的利器

在现代Web开发中,React以其灵活性和性能赢得了开发者们的广泛喜爱。然而,在处理HTML字符串时,如何将其有效地转化为React组件呢?这就是[React HTML Parser](https://wrakky.github.io/react-html-parser)发挥作用的地方。这个小巧而强大的工具可以帮你轻松完成这一任务,并提供了自定义修改和替换内容的便捷方法。 ## 项目介绍 Re

gitblog_00700的博客 1100

如何使用PHP Html Parser:超简单的HTML解析与操作指南

PHP Html Parser 是一个强大的HTML DOM解析工具,它允许你轻松操作HTML内容,使用类似jQuery的选择器在HTML页面中查找标签。无论是网页数据抓取、内容分析还是HTML处理,这个工具都能帮你快速实现需求。 ## 🌟 为什么选择PHP Html Parser? PHP Html Parser提供了直观的API和灵活的选择器,让HTML解析变得简单: - **jQuer

gitblog_00217的博客 483

告别复杂HTML解析:PHP Html Parser让DOM操作像jQuery一样简单

你还在为PHP中繁琐的HTML解析而头疼吗?面对不规范的HTML代码束手无策?本文将带你全面掌握PHP Html Parser——这款让HTML DOM操作变得像jQuery一样简单的开源工具,从基础安装到高级应用,一站式解决所有HTML解析难题。 读完本文你将获得: - 3分钟快速上手的安装与基础使用指南 - 12个核心配置选项的实战应用场景 - 5种DOM节点操作的进阶技巧 - 性能优化与错

gitblog_00036的博客 480

深入探索 Python 的 html.parser 模块:HTML 解析的得力助手

模块是 Python 标准库的一部分,为 HTML 和 XHTML 文本文件解析提供基础支持。它定义了HTMLParser类,能解析 HTML 数据,并在遇到不同的 HTML 元素(如开始标记、结束标记、文本、注释等)时调用相应方法。该模块的设计理念是简单易用,适用于处理格式不太规范的 HTML 数据。模块位置:源代码位于,这意味着无需额外安装,只要安装了 Python 环境,就能直接使用。HTMLParser类构造函数,创建解析器实例时,

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1575

7分钟掌握PHP Html Parser:让HTML解析像jQuery一样简单高效

PHP Html Parser是一款功能强大的HTML DOM解析工具,它让开发者能够轻松操作HTML文档,使用类jQuery的选择器快速定位页面元素。无论是抓取网页数据、提取特定内容还是修改HTML结构,这款工具都能提供简洁高效的解决方案,帮助PHP开发者摆脱繁琐的正则表达式,以直观的方式处理HTML。 ## 🚀 核心功能一览:为什么选择PHP Html Parser? PHP Html

gitblog_00059的博客 648

html5-parser实战案例:5个场景教你轻松处理复杂HTML文档

html5-parser是一个基于C语言开发的Python HTML5解析库,以其卓越的性能和高效的HTML文档处理能力受到开发者青睐。本文将通过5个实用场景,带你掌握如何利用html5-parser轻松应对各类复杂HTML文档处理任务。 ## 1. 快速安装与基础使用指南 ### 1.1 一键安装步骤 安装html5-parser非常简单,通过pip命令即可快速完成: ```bash pip

gitblog_00848的博客 944

React HTML Parser 使用教程

React HTML Parser 是一个用于将 HTML 字符串转换为 React 组件的实用工具。它可以将标准的 HTML 元素、属性和内联样式转换为它们的 React 等效项,并提供一个简单的方法来修改和替换内容。该项目在 GitHub 上开源,地址为:[https://github.com/peternewnham/react-html-parser](https://github.com

gitblog_00857的博客 959

React HTML Parser与TypeScript集成:类型安全的HTML转换终极指南

React HTML Parser 是一个强大的工具库,专门用于将HTML字符串直接转换为React组件,并提供简单的方式来修改和替换内容。通过与TypeScript集成,开发者可以获得完整的类型安全保证,确保HTML到React组件的转换过程更加可靠和可维护。🎯 ## 📋 为什么选择React HTML Parser? 在React开发中,处理动态HTML内容是一个常见需求。虽然Reac

gitblog_01004的博客 1073

Parser 模块:HTML 解析与数据清洗

筛选出所有 .html 文件,为后续解析提供数据源;从 .html 文件中提取 title、content ,并构造对应官网的 url 地址;将清洗后的数据按自定义格式存储为文本文件,便于后续建立索引。本文主要讲解编写 Parser 模块过程中涉及的部分知识。boost::filesystem 是 Boost 库中的一个组件,用于跨平台处理文件系统路径、文件操作和目录管理。它提供了面向对象的接口,简化了文件和目录的创建、删除、遍历等操作。

taduanlangan的博客 1332
上一篇: Perl学习指南
下一篇: 在文本中寻找 URI 地址
wx红杉树
博客等级 码龄21年 383粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值