使用perl中的RDF::RDFa::Parser模块解析出网站的rdf数据。在带有!DOCTYPE html PUBLIC“-/W3C//DTD HTML 4.01过渡//EN”>的网站上,它可以工作,但在使用xhtml !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML1.0过渡//EN“"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">的网站上没有输出...
测试网站-> http://www.filmstarts.de/kritiken/186918.html
use RDF::RDFa::Parser;
my $url = 'http://www.filmstarts.de/kritiken/186918.html';
my $options = RDF::RDFa::Parser::Config->tagsoup;
my $rdfa = RDF::RDFa::Parser->new_from_url($url, $options);
print $rdfa->opengraph('image');
print $rdfa->opengraph('description');发布于 2013-12-25 08:20:43
(我是RDF::RDFa::Parser的作者。)
看起来RDFa解析器使用的超文本标记语言解析器在该页面上失败了。(我也是所讨论的HTML解析器的维护者,所以我不能将责任推给其他任何人!)因此,当RDFa解析开始时,它看到的只是一个空的DOM树。
页面是quite hideously invalid XHTML的,但我仍然希望HTML解析器能做一个合理的工作。我已经filed a bug report for you了。
同时,一种变通办法可能是在RDF::RDFa::解析器之外构建XML::LibXML DOM树(可能使用libxml的内置HTML解析器?)。您可以将该树直接传递给RDFa解析器:
use RDF::RDFa::Parser;
use LWP::Simple qw(get);
my $url = 'http://www.filmstarts.de/kritiken/186918.html';
my $xhtml = get($url);
my $dom = somehow_build_a_dom_tree($xhtml); # hand-waving!!
my $options = RDF::RDFa::Parser::Config->tagsoup;
my $rdfa = RDF::RDFa::Parser->new($dom, $url, $options);
print $rdfa->opengraph('image');
print $rdfa->opengraph('description');我希望这对你有帮助!
更新:这是somehow_build_a_dom_tree的一个可能的实现...
sub somehow_build_a_dom_tree {
my $p = XML::LibXML->new;
$p->recover_silently(1);
$p->load_html( string => @_ );
}https://stackoverflow.com/questions/20767903
复制相似问题