我在$ var。
中有一个字符串使用Perl,我如何将此字符串传递给Google并获取一系列Google搜索结果?
答案 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::Client或LWP + 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来找到更新版本...