2016-01-22 6 views
8

Wydaje mi się, że mam problem z użyciem HTML::HTML5::Microdata::Parser lub RDF::Query lub ze składnią i semantyką SPARQL. Jestem zainteresowany tym bitem z news site page.zapytanie o metadane ze strony HTML za pomocą SPARQL nie zwraca niczego

<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> 

Tu jest mój kodu testu:

#! 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"; 
} 

opcje do HTML::HTML5::Microdata::Parser były po prostu mój ostatni wysiłek rowu do tej pracy. (W zasadzie nie mam pojęcia, co robię.)

Jakieś pomysły, jak to zrobić i uzyskać nazwiska autorów?

+0

W końcu skończyłem używając zamiast tego 'HTML :: Microdata'. Działa na to, co chcę z tym zrobić. Jednak nadal jestem zainteresowany tym, jak sprawić, aby działał "HTML :: HTML5 :: Microdata :: Parser" i SPARQL. – wilx

Odpowiedz

2

Wystarczy użyć Mojo::UserAgent i Mojo::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; 
} 

Wyjścia:

Zdeňka Trachtová 
san Sabina Netrvalová 

Przez krótki samouczek 8 minut na tych modułów, po prostu sprawdzić Mojocast episode 5.

Powiązane problemy