Web :: Scraper在HTML文档的<body>中找不到<link>或<meta>元素

Ste*_*ieD 2 perl scraper

我现在一直在盯着这一小时,我正在撒谎.

我试图从网页上抓取一些数据.这是我正在尝试提取的一些数据的片段:

<span itemprop="thumbnail" itemscope itemtype="http://schema.org/ImageObject">
  <link itemprop="url" href="http://blahblah.org/video/thumbnail_23432230.jpg">
  <meta itemprop="width" content="1280">
  <meta itemprop="height" content="720">
</span>
Run Code Online (Sandbox Code Playgroud)

我想通过Web :: Scraper模块从标签中获取href属性的值.这是相关的perl代码:

my $div = scraper {
  process 'span[itemprop="thumbnail"] > link', url => '@href';
};
my $res = $div->scrape( $html );
$url = $res->{url};
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,$ url都会返回undefined.我正在使用Web :: Scraper模块的.36版本.

Bor*_*din 7

这是因为有一个错误HTML::TreeBuilder::XPath.它对元素<link><meta>元素有一种天真的理解,坚持认为它们只属于<head>元素,即使它们具有itemprop属性.

处理元素的方式基于哈希值HTML::Tagset,并且可以通过黑客攻击此数据来实现各种修复.

如果将其添加到程序的顶部

use HTML::Tagset;

for (qw/ link meta /) {
    $HTML::Tagset::isHeadElement{$_}       = 0;
    $HTML::Tagset::isHeadOrBodyElement{$_} = 1;
}
Run Code Online (Sandbox Code Playgroud)

然后它"修复"你问题中的具体情况,但当然正确的解决方案应该考虑itemprop属性和标签.