使用perl分析html文件(2) z

Vivado IP核调参大师:高效配置RS编码器的避坑指南 本文深入解析Vivado中RS编码器IP核的高效配置方法,涵盖符号宽度选择、码长优化和AXI4-Stream接口控制等关键参数。重点指导如何避开常见陷阱,实现FPGA设计中的资源优化与性能平衡,提升RS编码在通信系统中的可靠性。 阅读详情

分析多个文件
下面讲一个实际的例子:一个学生的网页作业的自动评分程序。这个程序首先由一些html文件来构建一些树形结构,然后把他们存储在一个@trees数组中:
 

my @trees;
foreach (@files) {
    print " building tree for $_ .../n" if $options{v};
    my $tree = HTML::TreeBuilder->new;
    $tree->parse_file($_);
    push( @trees, $tree );
}

 

doitem()子函数遍历@trees数组,并且请求一个代码块来在每棵树中寻找特定的html元素,并且存贮代码块返回的结果。它调用printd()函数显示发现的html元素和这些元素所在的文件名(当使用-v选项被设置的话):

 

sub doitem {
    my $func = shift;
    my $num = 0;
    foreach my $i ( 0 .. $#files ) {

        my @elements = $func->( $files[$i], $trees[$i] );
        printd $files[$i], @elements;
        $num += @elements;
    }
    return $num;
}

上面提到的代码块是一个需要两个参数的子函数,两个参数一个是文件名另一个是该文件对应的html树,它返回书中找到元素的数组。下面的例子代码将返回所有网页中的斜体字,包括<i>标签元素(例如:<i>text</i>)和font-style属性为斜体的元素(例如:<span STYLE="font-style: italic">text</span>).

 

 

$n = doitem sub {
    my ( $file, $tree ) = @_;
    return ( $tree->find("i"),
        $tree->look_down( "style" => qr/font-style *: *italic/ ) );
    };

marking "Italicized text (2 points): "
  . ( ( $n > 0 ) ? "good. 2" : "no italic text. 0"
);

 

这样,在页面中的斜体字的两种方式都被检测了。marking函数报告检测的结果,并且在程序的最后进行测试,帮助计算总节点数。

其他的需求可以使用相同的方法,下面的代码看上去更加难理解,它使用了一个正则帮助我们选出网页中没定义颜色的元素。

my $pattern = qr/(^|[^-])color *: *rgb/( *[0-9]*, *[0-9]*, *[0-9]*/)/;
return $tree->look_down(
    "style" => $pattern,
    sub { $_[0]->as_trimmed_text ne "" }
);

nvu(一个可视化网页编辑器)使用rgb(R,G,B)形式的style属性设置文本的颜色(例如:<span STYLE="color: rgb(0, 0, 255);">text</span>)。上面这段代码比斜体字的代码稍微严格一些,因为它还过滤那些没有包含任何文字的元素。代码中的as_trimmed_text()方法返回cut掉开头和结尾部空白字符的文本内容。

下面这段代码使用了嵌套的look_down()函数来定位有边框并且有连接的图表。它可以找到任何被<a>包裹的有边框的<img>。

 

return $tree->look_down(
    "_tag" => "a",
    sub {
       $_[0]->look_down( "_tag" => "img", sub { hasBorder( $_[0] ) } );
    }
);

检查没有连接的图表更加有趣,它需要look_down()和look_up()两个函数,下面这段代码只找出没有被<a>包裹的<img>元素。

 

 

return $tree->look_down(
    "_tag" => "img",
    sub { !$_[0]->look_up( "_tag" => "a" ) and hasBorder( $_[0] ); }
);

检测正当的内部连接需要使用look_down()函数里的代码块排除一般的外部连接,通过检查href的值是否有协议名。还要验证连接到的文件是否真正存在。

 

 

use File::Basename;
$n = doitem sub {
    my ( $file, $tree ) = @_;
    return $tree->look_down(
        "_tag" => "a",
        "href" => qr//,
        sub {
            !( $_[0]->attr("href") =~ /^ *(http:|https:|ftp:|mailto:)/)
            and -e dirname($file) . "/" . decodeURL( $_[0]->attr("href") );
        }
    );
};

nvu通过指定body标签中的style的颜色属性来改变页面的字体颜色,就像:<body style="color: rgb(0, 0, 255);">。下面代码使用一个正则去匹配style属性并且取回三个颜色的值,任何不为零的颜色值就表示页面不是默认的颜色。

 

my $pattern = qr/(?:^|[^-])color *: *rgb/(( *[0-9]*),( *[0-9]*),( *[0-9]*)/)/;
return $tree->look_down(
    "_tag" => "body",
    "style" => qr//,
    sub {
        $_[0]->attr("style") =~ $pattern and
        ( $1 != 0 or $2 != 0 or $3 != 0 );
    }
);

合理的使用look_down(),look_up(),as_trimmed_text()等函数,我们的代码可以定位和标记出很html元素(图片,内部链接,背景图片等等)的存在。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
前端使用二开Thingsboard一、二、三事(三)-规则链 以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。 阅读详情

相关推荐

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 647

使用perl分析html文件(1) z

文章的背景是,作者在教授网页编辑的课程,他会给学生做一些使用nvu做网页作业,每个作业中有些特定的要求,作者苦于给学生的作业评分和做注释,所以就想到使用perl程序对学生的作品进行分析。perl的正则表达式在文本处理方面的能力已经非常卓越,并且还有分解网页的专用模组HTML::TreeBuilder。它提供了一个html的分解器,这个分解器可以从一个网页构建出一个元素的树形结构。并且,从一个网

626

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 460

perl学习笔记16 z

Web自动化和连网1.  LWP概述Ø         HTTP:Request请求对象包含了一些用于描述客户对服务器的请求的信息。它所包含的属性有:method(方法)、URL(统一资源定位)、header(标头)和content(内容)。HTTP:Request有4种请求方法:get、put、post和head。URL时所请求的URL地址。标头是一组健/值对,它提供了关于请求的附加信息

1845

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6686

高效与灵活相结合:Verilog编写的跨时钟域循环缓冲控制器解析

循环缓冲区,也被称作循环队列、环形缓冲区,是一种数据结构,其主要特性是使用一个固定大小的缓冲区作为数据的存储空间,这个缓冲区在逻辑上被视作是首尾相接的。虽然Verilog是一种常用的硬件描述语言,被广泛应用在FPGA和ASIC设计中,但是在描述循环缓冲区时,它并没有提供一种直接且灵活的方式来指定循环缓冲区的参数,如字长、缓冲区深度、缓冲区数量等。这给硬件设计带来了一定的不便。同时,该控制器的设计也充分考虑了硬件资源的利用率,通过优化的算法和数据结构,使得在实现高性能的同时,也能够有效地节省硬件资源。

qq_38334677的博客 1221

使用perl分析html文件(3) z

完成制作网页的最后的要求是页面外观的美观,遗憾的是,HTML::TreeBuilder或任何相关的模组都不能帮助完成对这个要求的评分,所以,本文的作者只能自己手动给最后一个要求评分。但是他有希望用perl在这项工作上帮点忙,所以就有了下面的一段代码:my $input = "";do {    print "$str1 [$str2]: ";    $input = STDIN>; 

314

[STC32G144K246入门第六步]DAC驱动

本文摘要介绍了STC32G144微控制器内置的12位DAC模块特性与应用。该芯片集成双通道独立DAC,需通过内部运放缓冲后从P0.7/P5.0引脚输出,支持音频处理、波形生成等应用场景。重点阐述了DAC的R-2R梯形网络工作原理、关键性能指标(12位分辨率、转换速度等)及编程配置方法,包括频率设置、寄存器操作和运放引脚配置。文中还提供了32点正弦波表示例和初始化代码,强调参考电压稳定性对输出精度的重要影响。

sinat_58149788的博客 141

Perl黑客需要知道的10件事 z

    Perl是专家级的系统管理员的首选脚本语言,但是它的作用远远不止这些。作为一个设计用于文件和文本处理的语言,除了其他多种用途之外,它还极其适用于UNIX系统的管理、Web编程,以及数据库编程。    作为一门最容易的编程语言,它非常容易上手,能够为简单的任务编写出高效的代码,因此Perl很容易就吸引了新用户,并成为他们完成自己任务的一个常用的重要工具。在正式开始讨论Perl编程之前,有

486

YOLOv11改进 | Conv篇 | 图像去雾卷积DEConv助力yolov11有效涨点(部署零额外开销)

本文介绍了一种最新改进机制用于低层视觉任务的细节增强卷积(DEConv)机制。DEConv在训练阶段采用"普通卷积+差分卷积"的多分支并联结构,增强网络对边缘、纹理等细节特征的学习能力;在推理阶段可折叠为标准3×3卷积,保持与普通卷积相同的计算效率。文中详细阐述了DEConv的工作原理、实现方法以及在YOLOv11中的应用步骤,包括核心代码解析、模型修改方法和训练配置。实验表明,该机制在去雾、去噪、超分等强调细节重建的任务中具有显著优势。文章还提供了完整的代码实现和训练指导.

Snu77的博客 2438

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1068

HTML属性转换,使用Perl将CSS样式属性转换为HTML属性

真正的快速背景:我们有一个将html转换为pdf的PDFMaker(HTMLDoc)。 HTMLDoc并不总是从客户端提供给我们的html中获取我们需要的样式。因此,我试图转换诸如style =“width:80px; height:90px;”之类的东西。到高度= 80宽度= 90。到目前为止,我的尝试揭示了我对后向引用的有限理解以及如何在Perl Regex中正确使用它们。我可以获取一个输入文...

weixin_39955781的博客 122

Python爬虫实战:高效爬取法律法规数据库的完整指南

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的法律法规数据库爬虫。我们将从爬虫的基本原理讲起,逐步深入到反爬机制应对、数据解析与存储、性能优化等高级话题。文章包含完整的代码实现,使用requests-html、aiohttp等现代库,以及应对法律数据库特殊结构的处理技巧。通过本文,您将掌握构建专业级法律数据采集系统的全套技能。关键词:Python爬虫、法律法规、数据采集、异步爬虫、反反爬本文详细介绍了使用Python爬取法律法规数据库的完整技术方案。

2201_76125261的博客 1275

perl学习笔记7 z

1.  单引号字串是包含在一对单引号内的任何字符序列。Perl认为包含在单引号内的每一个字符都不具有任何特殊的意义。唯一的两个例外是换码序列反斜杆单引号(/’),它代表字串内一个应保持原样的单引号;以及两个连续的反斜杠(//),它代表字串内一个应保持原样的反斜杠。2.  双引号是包含在一对双引号内的任何字符序列。在双引号字串中,可包含换行符(/n)、制表符(/t)或其他换码序列字符。Perl

1218

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Perl如何过滤html标签

比如一串字符串 123 如果只想拿到123怎么办呢? 用perl的正则表达式可以很容易的做到。 $str =~  s/(.+?)/$3/sg; 这种只能过滤掉左右对称的标签,如果你的字符串里的html标签不对称,或者是有缺陷,这种方式就做不了了。 如果上边的看不懂,那看个简单的: $retPromotionInfo=~s///g; $retPromotionIn

hongchangfirst 2551

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

cgi html模板,Perl/CGI 模板

使用模板技术,可以大量节省代码的编写量,提高代码效率,便于调试。一般我们把常用的HTML代码放到后缀为“.html”的文件中作为模板,并将这些模板文件统一放在名为“templates/”的子目录下。然后在所写的Perl/CGI程序中,使用这些HTML模板文件。)另外,在你给模板文件命名时,尽量取些描述性强的名字。通常的命名方法是:下划线后面紧跟程序名,目的是用来区分常规的HTML文件和HTML模板...

weixin_39997089的博客 354

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PERL的文件操作符 glob

#找到输入的文件列表,返回一个数组subarr_argv_file{my@arr_fname=@_;my@arr_file_list;foreach$list(@arr_fname){chomp($list);@qxlist=qx(ls$list);foreach$...

diedangxiang4092的博客 377

perl sendmail发送带附件的html邮件

最近要写个perl脚本发送带附件的html格式的邮件,要求从csv中读取发件人,收件人,以及邮件html body中的变化部分,好久没写perl脚本,有点吃力了。。:) #!/usr/local/bin/perl -w use strict; use warnings; if($#ARGV != 0){ die "Usage: $0 "; } # static properties

thejtechs的专栏 1352

正则表达式处理html实例(Perl实现)

1.Html中Tag提取])*>2.提取标签中的url和链接文本while ($Html =~ m{a\b([^>]+)>(.*?)}ig) { my $Guts = $1; my $Link = $2; if ($Guts =~ m{ \b HREF #href属性 \s* = \s* #两头可能出现空白符 (?: #其值为 "([^"]*)" #双引号

LoveLock 1838

perl从网页分析出英文单词

 1 #!/usr/bin/perl 2 use Inline CPP; 3 package MyParser; 4 use base "HTML::Parser"; 5  6 my $src='src.htm'; 7 my $allow=0; 8 my %hashwords; 9 my @arraywords;10 11 sub trim12 {13         my $str = $_[0];14         $str =~ s/^/s+//o;15         $str =~ s//s+$

gongyiling3468的专栏 564

使用perl制作数据图表

使用perl制作数据图表

oligaga的博客 404

Perl 正则表达式 html,使用正则表达式验证表单中的HTML字段使用perl

我有几个有关使用正则表达式来验证表单中的某些字段的快速问题。但我似乎有一些问题。使用正则表达式验证表单中的HTML字段使用perl所以这里是代码$userNameReg = "[a-zA-Z0-9_]+";$passwordReg = "([a-zA-Z]*)([A-Z]+)([0-9]+)";$emailReg = "[a-zA-Z0-9_]@[a-zA-Z]\.[a-zA-Z]{2,3}";i...

weixin_39716044的博客 145

Perl爬虫代码

目前在做Perl页面爬虫的模块,发现一些代码,做个详细的分析,把好的引用一下给自己用用。 1 #!/usr/bin/perl -w 2 3 use strict; 4 5 use HTTP::Request; 6 use ...

chiqu8683的博客 426

Perl语言的安全开发

Perl语言在开发过程中,安全性是一个不可忽视的重要课题。通过合理的输入验证、SQL注入防护、跨站脚本防范、文件安全处理、会话管理、敏感数据保护等措施,我们可以有效降低安全风险。在快速发展的技术环境中,开发者需要保持对安全问题的敏感性,不断学习和应用最新的安全实践,保护用户和应用的安全。最后,安全是一项长期的工作,需要开发者在每个项目的每个阶段都保持警惕。只有这样,我们才能在使用Perl语言进行开发时构建更加安全的应用程序。

2501_90485748的博客 1138

正则提取html中的图片,使用正则表达式从Perl中的HTML中提取img标签

我需要从url中提取验证码,并用Tesseract识别出来。我的代码是:#!/usr/bin/perl -X###$user = 'user'; #Enter your username here$pass = 'pass'; #Enter your password here####Server settings$home = "http://perltest.adavice.com";$url...

weixin_39636333的博客 234
上一篇: 使用perl分析html文件(1) z
下一篇: 使用perl分析html文件(3) z
KataDoc360
博客等级 码龄18年 65粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值