2015-02-10 2 views
2

Я использую код ниже, чтобы попытаться найти Google Scholar с моего сайта, и он будет работать один или два раза, а затем я получаю сообщение об ошибке «Ошибка GETing http://scholar.google.com: Не удается связаться с ученым .google.com: 80 (отказано в)»- код, я использую это следующим образом:Как получить доступ к Google Scholar с помощью Perl

use strict; 
use WWW::Mechanize; 
my $browser = WWW::Mechanize->new(); 
$browser->get('http://scholar.google.com'); 
$browser->form_name('f'); 
$browser->field('q','PCR'); 
$browser->submit(); 
print $browser->content(); 

Любые советы или рекомендации высоко оценили

+2

вам нужно использовать Do 'https: // scholar.google.com'? – mob

+0

http://scholar.google.com перенаправляет меня на https-url. – Sobrique

+0

Да, это правильный URL-адрес, и, как я уже упоминал, он работает как http, а не https secure. – neemie

ответ

1

Ваш код просто отлично, но Google Scholar решил не разрешать доступ «ботами», такими как LWP, см. perlmonks/461130 для получения дополнительной информации.

Edit: Я нашел решение, передавая агент пользователя и печенье идентификатор в заголовке:

use HTTP::Request; 
use HTTP::Cookies; 
use LWP::UserAgent; 

# randomize cookie id 
use Digest::MD5 qw(md5_hex); 
my $googleid = md5_hex(rand()); 

# escape query string 
use URI::Escape; 
my $query= uri_escape('search string'); 

# create request 
my $request = HTTP::Request->new(GET => 'http://scholar.google.com/scholar?q='.$query); 

# disguise as Mozilla 
my $ua = LWP::UserAgent->new; 
$ua->agent('Mozilla/5.0'); 

# use random id for Cookie 
my $cookies = HTTP::Cookies->new(); 
$cookies->set_cookie(0,'GSP', 'ID='.$googleid,'/','scholar.google.com'); 
$ua->cookie_jar($cookies); 

# submit request 
$response = $ua->request($request); 
if($response->is_success){ 
    print $response->code; 
    my $text = $response->decoded_content; 
    # do something 
} 
Смежные вопросы