2008-08-23 9 views
10

Ich versuche, Wikipedia-Seiten mit LWP::Simple abzurufen, aber sie kommen nicht zurück. Dieser Code:Warum kann ich keine Wikipediaseiten mit LWP :: Simple holen?

#!/usr/bin/perl 
use strict; 
use LWP::Simple; 

print get("http://en.wikipedia.org/wiki/Stack_overflow"); 

druckt nichts. Aber wenn ich eine andere Webseite benutze, sagen Sie http://www.google.com, es funktioniert gut.

Gibt es einen anderen Namen, den ich verwenden sollte, um auf Wikipedia-Seiten zu verweisen?

Was könnte hier vor sich gehen?

+0

Beachten Sie, dass Sie eine Fehlermeldung "403 Forbidden" erhalten. – Bryce

Antwort

18

Offenbar Wikipedia Blöcke LWP :: Simple Anfragen: http://www.perlmonks.org/?node_id=695886

Folgende Werke statt:

#!/usr/bin/perl 
use strict; 
use LWP::UserAgent; 

my $url = "http://en.wikipedia.org/wiki/Stack_overflow"; 

my $ua = LWP::UserAgent->new(); 
my $res = $ua->get($url); 

print $res->content; 
+0

Ich bekomme Fehler ** 500 Kann nicht mit en.wikipedia.org:443** für die angegebene Wiki-URL verbinden, aber für stackoverflow Homepage http://stackoverflow.com gibt es 403. Ich habe hinzugefügt '$ ua-> agent (" WikiBot/0.1 ");' vor dem Aufruf der 'get'-Methode funktionierte das für viele Seiten, einschließlich stackoverflow. Aber es gibt immer noch Fehler auf der Wiki-Seite, derselbe Fehler wie oben erwähnt. –

+0

Hinzugefügt '$ ua = LWP :: UserAgent-> neu (ssl_opts => {verify_hostname => 0}); 'und dieser Fehler ** 500 Keine Verbindung zu en.wikipedia.org:443** wurde behoben. Es kann jemand anderem helfen. –

4

Da Wikipedia wird das HTTP-User-Agent-String von LWP verwendet Blockierung :: Simple.

Sie erhalten eine "403 Verboten" -Antwort, wenn Sie versuchen, es zu verwenden.

Probieren Sie das LWP :: UserAgent-Modul aus, um dies zu umgehen und das Agentenattribut zu setzen.

12

Sie können auch festlegen, nur die UA auf der LWP :: Simple Modul - importieren nur die $ ua variabel, und es wird Ihnen erlauben, die zugrunde liegenden Useragent zu ändern:

use LWP::Simple qw/get $ua/; 
$ua->agent("WikiBot/0.1"); 
print get("http://en.wikipedia.org/wiki/Stack_overflow"); 
6

Ich löste dieses Problem mit LWP:RobotUA anstelle von LWP::UserAgent. Sie können das Dokument unten lesen. Es gibt nicht viele Unterschiede, die Sie ändern sollten.

http://lwp.interglacial.com/ch12_02.htm