2013-12-11 2 views
0

У меня есть проблема для анализа данных с помощью моего искателя. Я пишу в perl из freebase. Я пытаюсь вытащить данные из этого URL:Анализ данных из freebase с perl

(пример)

http://www.freebase.com/authority/imdb/title?ns&lang=en&filter=%2Ftype%2Fnamespace%2Fkeys&timestamp=2013-11-20&timestamp=2013-11-21

Это страница с IMDB_ID-х и MID-х. Я пытаюсь извлечь ссылки. Проблема в том, что у меня есть только 100 результатов, и когда я дойду до «нижней части страницы» в Mozilla Firefox, я получаю больше результатов (еще 11). Я использую LWP :: UserAgent.

Кто-нибудь знает решение с некоторым примером кода, как автоматически вытащить все 111 ссылок MID с этой страницы.

Вот мой код:

#!/usr/bin/perl 


    use LWP::Simple; 
    use LWP::UserAgent; 
    use HTTP::Request; 
    use HTTP::Response; 
    use HTML::LinkExtor; 


    $URL = 'http://www.freebase.com/authority/imdb/title?ns&lang=en& filter=%2Ftype%2Fnamespace%2Fkeys&timestamp=2013-11-20&timestamp=2013-11-21'; #URL 

    $browser = LWP::UserAgent->new(); 
    $browser->timeout(10); 

    my $request = HTTP::Request->new(GET => $URL); 
    my $response = $browser->request($request); 
    if ($response->is_error()) {printf "%s\n", $response->status_line;} 

    $contents = $response->content(); 
    my ($page_parser) = HTML::LinkExtor->new(undef, $URL); 
    $page_parser->parse($contents)->eof; 
    @links = $page_parser->links; 

    foreach $link (@links) { 
     $_ = $$link[2]; 

     # if (index($$link[2], $_) != -1) { 
     $mid = $$link[2];# if m/http:\/\/www\.freebase\.com\/m\//; 


     #$mid =~ s/\?links=//; 
     #$mid =~ s/http:\/\/www.freebase.com\///; 

     print "MID $mid\n"; 
    } 
+1

LWP :: UserAgent не очень хорошо обрабатывает JS-тяжелые страницы. Возможно, вам будет проще использовать Freebase [HTTP API] (https://developers.google.com/freebase/v1/getting-started). – rutter

+0

Я хотел бы сделать это с помощью некоторого модуля perl. Любой может дать мне образец кода. – user3085049

+0

Вы можете использовать любую клиентскую библиотеку HTTP, более чем вероятно. Ключевое различие заключается в том, обрабатываете ли вы данные, которые [отформатированы для пользователей] (http://en.wikipedia.org/wiki/Special:Log) или [больше для использования роботами] (http: // ru. wikipedia.org/w/api.php?action=query&list=logevents&format=xml). – rutter

ответ

1

ползать freebase.com, скорее всего, получите вы заблокировали. Как упоминалось в комментариях, Freebase предлагает как RESTful JSON API для использования в режиме легкой/средней мощности, так и интерактивные запросы и bulk download всей базы данных для тяжелых потребителей.

+0

Мне нужно только один раз обходить эту страницу, чтобы обновить мою базу данных. Любой образец кода был бы хорош или какой-либо пример запроса для извлечения всех данных с этого URL-адреса: http://www.freebase.com/authority/imdb/title?ns&lang=en&filter=%2Ftype%2Fnamespace%2Fkeys×tamp=2013-11-20×tamp = 2013-11-21 – user3085049

+0

По данным я имею в виду все MID из веб-страницы – user3085049