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

task5:在本地搭建大模型(ollama 和 LM studio 对比),接入 openclaw 关于大模型,大家千万不要想着在本地部署,根本不可行,没有那个财力。另外大模型迭代快,不可能每周都在下载大模型。再次,还是国外的模型好用,国内的模型真的在 deepresearch 上就有很大问题,你们懂的。所以本篇文章,还是聚焦在探索层面+实操,并不会实战。 阅读详情

文章的背景是,作者在教授网页编辑的课程,他会给学生做一些使用nvu做网页作业,每个作业中有些特定的要求,作者苦于给学生的作业评分和做注释,所以就想到使用perl程序对学生的作品进行分析。

perl的正则表达式在文本处理方面的能力已经非常卓越,并且还有分解网页的专用模组HTML::TreeBuilder。它提供了一个html的分解器,这个分解器可以从一个网页构建出一个元素的树形结构。并且,从一个网页中建立一棵树和构建它的内容是非常容易的:

#新建一棵树

$tree = HTML::TreeBuilder->new;
#由一个网页文件构建树的内容

$tree->parse_file($file_name);
#当然也可以由一个变量的内容中分解出树的内容

$tree->parse($value);



树的节点是一个HTML::Element对象。这有很多方法可以存取和操作树中的这些节点。当你使用完成了这棵树的时候,可以使用下面的方法销毁它并且释放它占用的内存:

$tree->delete;

在HTML::TreeBuilder建立的树形结构中,一个模组HTML::Element代表一个html元素。它有大量的方法存取和操作这些元素和搜寻树中的子孙节点和祖先节点。例如:方法find()使用一个或更多的标签名作为参数来寻找所有的下行的相关节点:

@elements = $element->find('a', 'img');

上面这条语句将把所有$element节点以下的<a>节点和<img>节点存储在@elements数组里。方法look_down()是比find()更强大的搜索方法。它以三种类型的方法来查找下行节点:1,严格指定标签的名称或属性值。2,使用正则表达式匹配。3,通过一个返回真的子函数来确定想要的节点。下面是一些例子:

@anchors = $element->look_down('_tag' => 'a');

找到所有的$element下的<a>节点,并存储到@anchors数组中。

@colors = $element->look_down('style' => qr/color/);

找到所有的$element下的含有style属性并且该属性包括color的节点,并存储到@anchors数组中。

@largeimages = $element->look_down(
    sub {
         $_[0]->tag() eq 'img' and
        ($_[0]->attr('width') > 100 or
         $_[0]->attr('height') > 100)
    }
);



找到所有的$element下的<img>节点并且节点中的width和height属性必须大于100像素,并存储到@largeimages数组中。注意:这样的语句在检测到没有width和height属性的<img>节点时会产生一个警告信息。

我们还可以混用三种方法,例如:

@largeimages = $element->look_down(
    '_tag' => 'img',
    'width' => qr//,
    'height' => qr//,
    sub { $_[0]->attr('width') > 100 or
          $_[0]->attr('height') > 100 }
);


这样就可以过滤那些没有width和height属性的<img>节点了,'width' => qr// 和 'height' => qr// 保证只有还有这两个属性的节点才被搜索到。

look_up()方法和look_down()方法一样,只不过它搜索$element节点的祖先节点(上行查找)。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go) 华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。 阅读详情

相关推荐

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

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

分析多个文件下面讲一个实际的例子:一个学生的网页作业的自动评分程序。这个程序首先由一些html文件来构建一些树形结构,然后把他们存储在一个@trees数组中: my @trees;foreach (@files) {    print " building tree for $_ .../n" if $options{v};    my $tree = HTML::TreeBuil

580

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 416

perl学习笔记16 z

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

1845

LVGL8.x 实体按键与Keypad驱动的无缝对接实战

本文详细解析了LVGL8.x中实体按键与Keypad驱动的两种对接方案:坐标映射的Button方式与事件驱动的Keypad方式。重点阐述了如何模块化裁剪lv_port_indev.c模板文件,并深入讲解了Keypad驱动与Group焦点管理系统的核心协作机制,为无触摸屏的嵌入式设备提供流畅的UI交互解决方案。

weixin_29164497的博客 448

3D美术14——max——fbx导入max后直接生成bip人形骨骼插件

最近经常会从unity里反八FBX到max里进行2次修改。 但是非常尴尬的事情就是,就是用max做的fbx,你在反导入回来,BIP骨骼都会变成预制体。这个时候有一个方法补救。那就是在导入的时候调整一下参数。(如下图) 把这里调整成设置为骨骼。就还可以了。 但是,如果你不是用max做的FBX。呵呵,那么你一定很头大,因为完全没有用。 所以,这个时候就要上插件了。 Autofbxtobip v.1.1 这个插件适用于2015及其以上版本。 在这之前我还用过一款叫BIPPY,但是效果相当感人,照着这个图片调整

qq_37576129的博客 1万+

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

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

314

IAR使用教程:如何导入现有工程并成功编译

详细介绍如何在IAR中导入现有工程项目并完成编译配置,解决常见报错问题。通过清晰的操作指引,帮助开发者快速上手iar使用教程中的关键环节,提升开发效率。

weixin_42437253的博客 884

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

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

486

逆变器专题(3)-锁相环-PLL

锁相环作为并网逆变器的第一道门户,其锁相的精度将直接影响逆变器是否并网成功,若锁相精度较差,则会直接导致系统的功率因数下降,产生无功等等。在有关文献中指出,提高PLL带宽可以准确且快速进行锁相,而当电网电压含有谐波时,可适当降低带宽抵制谐波的干扰。成为变化量,而如果两者旋转速度达到一致时,所在的交轴分量。ki很大,即带宽很大时,稳定裕度不够,锁相环锁不住。为交流量,当频率锁定而相位没有锁定时,即。,即控制环前馈,可实现将锁相速度的加快。控为0,则可实现系统完美锁相。mod,取余,可减少存储空间。

cyc19980105的博客 6184

23 中望CAD二次开发(ZRX C++)-自定义实体(二)

本文详细介绍了自定义图形实体,如何实现几何变换、捕捉、节点编辑,并介绍了CAD代理的概念。

cilvsuanna的博客 437

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

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

weixin_39955781的博客 122

C#与欧姆龙PLC 通信——Fins Tcp协议

该调试助手专门为了帮助大家学习以及测试Fins-Tcp通信,下面进行详细介绍。

qq_34059233的博客 2087

perl学习笔记7 z

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

1218

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

cgi html模板,Perl/CGI 模板

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

weixin_39997089的博客 354

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Perl如何过滤html标签

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

hongchangfirst 2551

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

正则表达式处理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制作数据图表

使用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

Perl怎样过滤html标签

比方一串字符串 <div><b>123</b></div> 假设仅仅想拿到123怎么办呢? 用perl的正則表達式能够非常easy的做到。 $str =~ s/<([a-zA-Z]\w*)(\s+\S+)*>(.+?)<\/\1>/$3/sg; 这样的仅仅能过滤掉左右对称的标签,假设你的...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值