1

我对一切都很陌生。请帮忙。我正在尝试抓取每个

<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>

在一个网页中。我想抓住 /v/name/idlike123123ksajdfk 部分。(知道

<div class="name"><a href="/v/

部分是固定的)所以我写了正则表达式(可以让你笑):

~m#<div class="name"><a href="(/v/.*?)">#

如果您更正我的愚蠢代码,这将非常有帮助。

4

4 回答 4

6

使用强大的 HTML 解析器(请参阅http://htmlparsing.com/了解原因):

use strictures;
use Web::Query qw();
my $w = Web::Query->new_from_html(<<'HTML');
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
<div class="name"><a href="/v/name/idlike123123ksajdfk">name</a></div>
HTML

my @v_links = $w->find('div.name > a[href^="/v/"]')->attr('href');
于 2012-05-18T11:47:07.723 回答
1

有很多 Perl 模块可以从 HTML 中提取链接。WWW::MechanizeMojo::DOMHTML::LinkExtorHTML::SimpleLinkExtor可以做到。

于 2012-05-18T19:27:17.057 回答
1

使用 Mojolicious 进行 Web 抓取可能是当今 Perl 中最简单的方法

http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Web_scraping

于 2012-06-12T19:09:03.493 回答
0

您不应该使用正则表达式来解析 HTML,因为有很多库可以进行此类解析。

Daxim 的回答就是一个很好的例子。


但是,如果您仍然想使用正则表达式并且您将文本分配给$_,那么

my @list = m{<div class="name"><a href="(/v/.*?)">}g;

将为您提供所有发现的列表。

于 2012-05-18T11:47:40.167 回答