perl - 使用 TreeBuilder 在 Perl 中提取链接

标签 perl mechanize www-mechanize html-content-extraction html-treebuilder

我正在编写一个脚本来将一堆信息提取到一个 HTML 文件中。但是,我在从相关页面中仅提取一组特定的链接时遇到了一些困难。

这是网站的粗略结构。在内部内容 div 和我在下面显示的内容之间还有其他一些标题和段落。

<div id="innercontent">
<h1>Download here</h1>
<a href="website.pdf"><img src="stuff"></a>
</div>

现在在 div ID“innercontent”中找到了多个链接,所以我正在寻找一种方法来匹配字符串或以其他方式只获取我想要的链接。请记住,我要获取的所有链接都是 .pdf,所以这可能会有所帮助。根据我所做的研究,我很确定 TreeBuilder 可以处理这个问题。这是我正在尝试的两种方法。我更愿意使用第一个来解决它。
# link to pdf of transcript
for ( $mech->look_down(_tag => 'a') ) {
  next unless $_->as_trimmed_text =~ m/pdf/;
  say $_->as_HTML;
}

my @links = $mech->links();
  for my $link ( @links ) {
  print $link->url;
}

我意识到后一种方法只是在整个页面上搜索链接,但我将它包含在内,以防这种方法更有效,或者这两种方法可以结合使用。

任何帮助或建议将不胜感激!

最佳答案

WWW::Mechanize能够根据相当多的属性提取链接,例如为链接显示的文本、实际链接或 id。

对于您的具体示例,您将获取 pdf 链接:

my @links = $mech->find_all_links(url_regex=>qr/\.pdf$/)

然后对结果数组做任何你需要的事情。

您可以看到 documentation .和 this doc将向您显示可用的选项。

关于perl - 使用 TreeBuilder 在 Perl 中提取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510091/

相关文章:

Python Mechanize - 登录

ruby-on-rails - 我无法使用 Mechanize 编辑字段

python - 通过更改 URL Mechanize 下载文件

perl - WWW::Mechanize::Firefox 运行良好:一些尝试使脚本更健壮

login - 使用 Mechanize 和 Nokogiri 登录网站?

perl - Perl中三元运算符的优化

Perl WWW::Mechanize foreach 循环跟踪链接并查看它们是否给出 401 响应

regex - Perl:正则表达式替换

perl - perl 中的大写重音字符

perl - 在 WWW::Mechanize 中设置基本身份验证凭据