Web::Scraper 在 HTML 文档的 <body> 中找不到 <link> 或 <meta> 元素
Web::Scraper Cannot find <link> or <meta> elements in the <body> of an HTML document
我已经盯着这个看了一个小时了,现在我认输了。
我正在尝试从网页中抓取一些数据。这是我要提取的一些数据的片段:
<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>
我想从 Web::Scraper 模块的标签中获取 href 属性 的值。这是相关的 perl 代码:
my $div = scraper {
process 'span[itemprop="thumbnail"] > link', url => '@href';
};
my $res = $div->scrape( $html );
$url = $res->{url};
无论我怎样尝试,$url returns 未定义。我使用的是 Web::Scraper 模块的 .36 版。
这是因为 HTML::TreeBuilder::XPath
中的错误。它对 <link>
和 <meta>
元素有一种天真的理解,坚持认为它们只属于 <head>
元素,即使它们具有 itemprop
属性。
处理元素的方式基于 HTML::Tagset
中的哈希值,并且可以通过破解此数据来实现某种修复。
如果将它添加到程序的顶部
use HTML::Tagset;
for (qw/ link meta /) {
$HTML::Tagset::isHeadElement{$_} = 0;
$HTML::Tagset::isHeadOrBodyElement{$_} = 1;
}
那么"fixes"你问题中的具体情况,当然,正确的解决方案应该考虑itemprop
属性和标签。
我已经盯着这个看了一个小时了,现在我认输了。
我正在尝试从网页中抓取一些数据。这是我要提取的一些数据的片段:
<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>
我想从 Web::Scraper 模块的标签中获取 href 属性 的值。这是相关的 perl 代码:
my $div = scraper {
process 'span[itemprop="thumbnail"] > link', url => '@href';
};
my $res = $div->scrape( $html );
$url = $res->{url};
无论我怎样尝试,$url returns 未定义。我使用的是 Web::Scraper 模块的 .36 版。
这是因为 HTML::TreeBuilder::XPath
中的错误。它对 <link>
和 <meta>
元素有一种天真的理解,坚持认为它们只属于 <head>
元素,即使它们具有 itemprop
属性。
处理元素的方式基于 HTML::Tagset
中的哈希值,并且可以通过破解此数据来实现某种修复。
如果将它添加到程序的顶部
use HTML::Tagset;
for (qw/ link meta /) {
$HTML::Tagset::isHeadElement{$_} = 0;
$HTML::Tagset::isHeadOrBodyElement{$_} = 1;
}
那么"fixes"你问题中的具体情况,当然,正确的解决方案应该考虑itemprop
属性和标签。