当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl中从HTML中提取URL和链接文本?

如何解决《如何在Perl中从HTML中提取URL和链接文本?》经验,为你挑选了5个好方法。

我之前曾在Groovy中询问过如何做到这一点.但是,由于所有CPAN库,现在我在Perl中重写我的应用程序.

如果页面包含以下链接:

Google

Apple

输出将是:

Google, http://www.google.com
Apple, http://www.apple.com

在Perl中执行此操作的最佳方法是什么?



1> Andy Lester..:

请看一下使用WWW :: Mechanize模块.它将为您提取您的网页,然后让您轻松使用URL列表.

my $mech = WWW::Mechanize->new();
$mech->get( $some_url );
my @links = $mech->links();
for my $link ( @links ) {
    printf "%s, %s\n", $link->text, $link->url;
}

非常简单,如果您希望导航到该页面上的其他URL,它甚至更简单.

Mech基本上是对象中的浏览器.


我冒昧地改变了print语句,包含了melling所要求的链接文本.

2> Sherm Pendle..:

看看HTML :: LinkExtractor和HTML :: LinkExtor,HTML :: Parser包的一部分.

HTML :: LinkExtractor类似于HTML :: LinkExtor,除了获取URL之外,您还可以获得链接文本.



3> draegtun..:

我喜欢用pQuery这样的东西......

use pQuery;

pQuery( 'http://www.perlbuzz.com' )->find( 'a' )->each(
    sub {
        say $_->innerHTML . q{, } . $_->getAttribute( 'href' );
    }
);

另请查看此前的stackoverflow.com问题仿真lex,如Perl或Python中的功能,以获得类似的答案.



4> 小智..:

如果您喜欢冒险并且想要在没有模块的情况下尝试,那么这样的事情应该有效(根据您的需求进行调整):

#!/usr/bin/perl

if($#ARGV < 0) {
  print "$0: Need URL argument.\n";
  exit 1;
}

my @content = split(/\n/,`wget -qO- $ARGV[0]`);
my @links = grep(//,@content);

foreach my $c (@links){
  $c =~ //;
  $link = $1;
  $c =~ /([\s\S]+?)<\/a>/;
  $title = $1;
  print "$title, $link\n";
}

我可能在这里做了一些错误的事情,但它在我写完之后试过的一些测试用例中起作用(它没有考虑像标签之类的东西等).



5> Alexandr Cio..:

另一种方法是使用XPath查询已解析的HTML.在复杂的情况下需要它,比如使用特定的类提取div中的所有链接.为此使用HTML :: TreeBuilder :: XPath.

  my $tree=HTML::TreeBuilder::XPath->new_from_content($c);
  my $nodes=$tree->findnodes(q{//map[@name='map1']/area});
  while (my $node=$nodes->shift) {
    my $t=$node->attr('title');
  }


另外,添加$ tree-> delete以避免内存泄漏.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有