html – 如何在Perl之间轻松解析

html – 如何在Perl之间轻松解析,第1张

概述我想将网站解析为Perl数据结构. 首先我加载页面 use LWP::Simple;my $html = get("http://f.oo"); 现在我知道两种方法来处理它. 首先是正则表达式并对模块进行限制. 我开始阅读HTML::Parser并找到了一些例子. 但我对Perl的知识并不确定. 我的代码示例继续 my @links;my $p = HTML::Parser->new(); 我想将网站解析为Perl数据结构.
首先我加载页面
use LWP::Simple;my $HTML = get("http://f.oo");

现在我知道两种方法来处理它.
首先是正则表达式并对模块进行限制.

我开始阅读HTML::Parser并找到了一些例子.
但我对Perl的知识并不确定.

我的代码示例继续

my @links;my $p = HTML::Parser->new();$p->handler(start => \&start_handler,"tagname,attr,self");$p->parse($HTML);foreach my $link(@links){  print "linktext: ",$link->[1],"\tURL: ",$link->[0],"\n";}sub start_handler{  return if(shift ne 'a');  my ($class) = shift->{href};  my $self = shift;  my $text;  $self->handler(text => sub{$text = shift;},"dtext");  $self->handler(end => sub{push(@links,[$class,$text]) if(shift eq 'a')},"tagname");}

我不明白为什么有两次换班. secound应该是自我指针.但第一个让我觉得自引用已经全部变为shiftet,用作Hash,而href的值存储在$class中.有人可以解释这一行(我的($class)= shift-> {href};)?

除了这个缺点,我不想解析所有的URL,我想把所有的代码放在< div class =“foo”>之间.和< / div>到一个字符串,其间有很多代码,特别是其他< div>< / div>标签.所以我或模块必须找到正确的结束.
之后,我计划再次扫描字符串,找到特殊的类,如< h1>,< h2>,< p class =“foo2”>< / p>等.

我希望这些信息可以帮助你给我一些有用的建议,请记住,首先我想要一个简单的理解方式,这在第一级不是一个很好的表现!

解决方法 HTML :: Parser更像是一个tokenizer而不是一个解析器.这给你留下了很多艰苦的工作.您是否考虑过使用 HTML::TreeBuilder(使用HTML :: Parser)或 XML::LibXML(一个支持HTML的优秀图书馆)? 总结

以上是内存溢出为你收集整理的html – 如何在Perl之间轻松解析全部内容,希望文章能够帮你解决html – 如何在Perl之间轻松解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1140567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存