在Perl脚本中搜索?

时间:2011-01-26 03:42:17

标签: perl cpan perl-module

我在$ var。

中有一个字符串

使用Perl,我如何将此字符串传递给Google并获取一系列Google搜索结果?

3 个答案:

答案 0 :(得分:8)

在继续之前,请注意Google Terms of Service

  

您同意不会通过Google提供的界面以外的任何方式访问(或尝试访问)任何服务,除非您在与Google的单独协议中明确允许这样做。您明确同意不通过任何自动方式(包括使用脚本或网络爬虫)访问(或尝试访问)任何服务,并应确保您遵守服务中存在的任何robots.txt文件中的说明。


话虽如此,存在一个以编程方式查询网页搜索的官方API。

  

JSON/Atom Custom Search API可让您开发网站和程序,以便以编程方式从Google Custom Search检索和显示搜索结果。使用此API,您可以使用RESTful请求以JSON或Atom格式获取搜索结果。

您可以使用XML::Atom::ClientLWP + JSON::Any或许多其他图书馆来执行REST来电。

(您仍然可以找到对旧版Google Web Search API的引用,但它已被弃用且受限制。)

答案 1 :(得分:1)

查看Google自定义搜索API: http://code.google.com/apis/customsearch/

如果您需要搜索更多种类的主机,则需要使用较旧的,已弃用的Websearch API,但这会限制您每天可以进行的查询次数。

除此之外,你需要进行大量的HTML抓取和解析。

答案 2 :(得分:0)

以下是一个简单的脚本的样子(是的,它违反了TOS所以它只是PoC,你不应该使用它......)

use WWW::Mechanize;
use 5.10.0;
use strict;
use warnings;

my $mech = new WWW::Mechanize;

my $option = shift; 

#you may customize your google search by editing this url (always end it with "q=" though)
my $google = 'http://www.google.co.uk/search?q='; 
my @dork = ("this is my search one","this is my search two"); 

        #declare necessary variables
        my $max = 0;
        my $link;
        my $sc = scalar(@dork);

        #start the main loop, one itineration for every google search
        for my $i ( 0 .. $sc ) {

            #loop until the maximum number of results chosen isn't reached
            while ( $max <= $option ) {
                #say $google . $dork[$i] . "&start=" . $max;
                $mech->get( $google . $dork[$i] . "&start=" . $max );

                #get all the google results
                foreach $link ( $mech->links() ) {
                    my $google_url = $link->url;
                    if ( $google_url !~ /^\// && $google_url !~ /google/ ) {
                    say $google_url;
            }
                    }
                     $max += 10;
                }


            }

顺便说一下,我写了一段时间,所以它不完全符合标准,但它完成了工作,而我懒得启动linux来找到更新版本...