2013-12-11 61 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:// en。 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