And*_*ter 40
请看一下使用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;
}
Run Code Online (Sandbox Code Playgroud)
非常简单,如果您希望导航到该页面上的其他URL,它甚至更简单.
Mech基本上是对象中的浏览器.
She*_*ley 11
看看HTML :: LinkExtractor和HTML :: LinkExtor,HTML :: Parser包的一部分.
HTML :: LinkExtractor类似于HTML :: LinkExtor,除了获取URL之外,您还可以获得链接文本.
我喜欢用pQuery这样的东西......
use pQuery;
pQuery( 'http://www.perlbuzz.com' )->find( 'a' )->each(
sub {
say $_->innerHTML . q{, } . $_->getAttribute( 'href' );
}
);
Run Code Online (Sandbox Code Playgroud)
另请查看此前的stackoverflow.com问题仿真lex,如Perl或Python中的功能,以获得类似的答案.
小智 6
如果您喜欢冒险并且想要在没有模块的情况下尝试,那么这样的事情应该有效(根据您的需求进行调整):
#!/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(/<a.*href=.*>/,@content);
foreach my $c (@links){
$c =~ /<a.*href="([\s\S]+?)".*>/;
$link = $1;
$c =~ /<a.*href.*>([\s\S]+?)<\/a>/;
$title = $1;
print "$title, $link\n";
}
Run Code Online (Sandbox Code Playgroud)
我可能在这里做了一些错误的事情,但它在我写完之后试过的一些测试用例中起作用(它没有考虑像<img>标签之类的东西等).
另一种方法是使用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');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30373 次 |
| 最近记录: |