2016-01-22 18 views
8

Tôi dường như đang gặp sự cố hoặc sử dụng HTML::HTML5::Microdata::Parser hoặc RDF::Query hoặc với ngữ nghĩa SPARQL và ngữ nghĩa. Tôi quan tâm đến bit này từ một số news site page.truy vấn siêu dữ liệu từ trang HTML có SPARQL không trả về gì

<div class="authors"> 
Autoři: <span itemprop="author" itemscope itemtype="http://schema.org/Person"><a rel="author" itemprop="url" class="name" href="http://vice.idnes.cz/novinari.aspx?idnov=2504" ><span itemprop="name">Zdeňka Trachtová</span></a></span> 
, 
<span itemprop="author" itemscope itemtype="http://schema.org/Person"><a rel="author" itemprop="url" href="http://vice.idnes.cz/novinari.aspx?idnov=3495" ><span itemprop="additionalName">san</span></a><span class="h" itemprop="name">Sabina Netrvalová</span></span> 
</div> 

Đây là mã thử nghiệm của tôi:

#! env perl 

use strict; 
use Data::Dumper; 
use HTML::HTML5::Microdata::Parser; 
use RDF::Query; 
use IO::Handle; 
use LWP::Simple; 


STDOUT->binmode(":utf8"); 
STDERR->binmode(":utf8"); 

my $htmldoc = LWP::Simple::get(
    "http://zpravy.idnes.cz/zacinaji-zapisy-do-prvnich-trid-dn3-/domaci.aspx?c=A160114_171615_domaci_zt"); 
die "Could not fetch URL. [email protected]" unless defined $htmldoc; 

my $microdata = HTML::HTML5::Microdata::Parser->new (
    $htmldoc, $ARGV[0], 
    {auto_config => 1, tdb_service => 1, xhtml_meta => 1, xhtml_rel => 1}); 
print STDERR "microdata->graph:\n", Dumper($microdata->graph), "\n"; 

my $query = RDF::Query->new(<<'SPARQL'); 
PREFIX schema: <http://schema.org/> 
SELECT * 
WHERE { 
    ?author a schema:Person . 
} 
SPARQL 

my $people = $query->execute($microdata->graph); 
print STDERR "authors from RDF:\n", Dumper($people), "\n"; 
while (my $person = $people->next) { 
    print STDERR "people: ", $person, "\n"; 
} 

Các tùy chọn cho HTML::HTML5::Microdata::Parser chỉ là nỗ lực cuối cùng của tôi để làm cho công việc này. (Tôi đã cơ bản không biết mình đang làm gì.)

Bất kỳ ý tưởng nào về cách tạo tác phẩm này và lấy tên của tác giả?

+0

Cuối cùng, tôi đã sử dụng 'HTML :: Microdata' thay thế. Nó hoạt động cho những gì tôi muốn làm với nó. Tuy nhiên, tôi vẫn quan tâm đến việc nghe về cách tạo ra công cụ 'HTML :: HTML5 :: Microdata :: Parser' và SPARQL. – wilx

Trả lời

2

Chỉ cần sử dụng Mojo::UserAgentMojo::DOM:

use strict; 
use warnings; 
use utf8; 
use v5.10; 

BEGIN { 
    binmode *STDOUT, ':utf8'; 
    binmode *STDERR, ':utf8'; 
} 

use Mojo::UserAgent; 

my $url = "http://zpravy.idnes.cz/zacinaji-zapisy-do-prvnich-trid-dn3-/domaci.aspx?c=A160114_171615_domaci_zt"; 

my $dom = Mojo::UserAgent->new->get($url)->res->dom; 

# Process all authors 
for my $span ($dom->find('span[itemprop=author]')->each) { 
    say $span->all_text; 
} 

Đầu ra:

Zdeňka Trachtová 
san Sabina Netrvalová 

Để xem hướng dẫn 8 phút ngắn bằng các mô-đun, chỉ cần kiểm tra Mojocast episode 5.

Các vấn đề liên quan