Frage

Ich versuche, Wikipedia-Seiten abzurufen LWP::Einfach, aber sie kommen nicht zurück.Dieser Code:

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

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

druckt nichts.Aber wenn ich beispielsweise eine andere Webseite verwende 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 los sein?

War es hilfreich?

Lösung

Anscheinend blockiert Wikipedia LWP::Simple-Anfragen: http://www.perlmonks.org/?node_id=695886

Folgendes funktioniert stattdessen:

#!/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;

Andere Tipps

Sie können den UA auch einfach im LWP::Simple-Modul festlegen – importieren Sie einfach die Variable $ua und schon können Sie den zugrunde liegenden UserAgent ändern:

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

Ich habe dieses Problem mit gelöst LWP:RobotUA anstatt 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

Weil Wikipedia die von LWP::Simple verwendete HTTP-Benutzeragentenzeichenfolge blockiert.

Wenn Sie versuchen, es zu verwenden, erhalten Sie die Antwort „403 verboten“.

Probieren Sie das Modul LWP::UserAgent aus, um dieses Problem zu umgehen, indem Sie das Agent-Attribut festlegen.

Sehen Sie sich auch die Mediawiki-bezogenen CPAN-Module an – diese sind für den Zugriff auf Mediawiki-Websites (zu denen auch Wikipedia gehört) konzipiert und bieten Ihnen möglicherweise mehr Schnickschnack als einfaches LWP.

http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top