使用perl从freebase解析数据

时间:2013-12-11 00:16:21

标签: perl web-crawler freebase

我有问题用我的抓取工具解析数据我正在从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。

任何人都知道一些示例代码的解决方案,如何从此页面自动提取MID的所有111个链接。

这是我的代码:

#!/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 个答案:

答案 0 :(得分:1)

抓取freebase.com可能会阻止你。正如评论中所提到的,Freebase为轻度/中等任务使用提供RESTful JSON API或交互式查询,为重度消费者提供整个数据库的bulk download