11

我正在尝试使用LWP::Simple获取维基百科页面,但它们没有回来。这段代码:

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

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

不打印任何东西。但是,如果我使用其他网页,比如说http://www.google.com,它可以正常工作。

我应该使用其他名称来引用维基百科页面吗?

这里会发生什么?

4

5 回答 5

18

显然维基百科阻止了 LWP::Simple 请求:http ://www.perlmonks.org/?node_id=695886

以下工作代替:

#!/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;
于 2008-08-23T20:33:00.787 回答
11

您也可以只在 LWP::Simple 模块上设置 UA - 只需导入 $ua 变量,它就可以让您修改底层的 UserAgent:

use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
于 2008-09-16T14:44:30.207 回答
6

我使用LWP:RobotUA代替解决了这个问题LWP::UserAgent。您可以阅读下面的文档。您应该修改的差异不大。

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

于 2012-11-02T09:43:05.307 回答
5

因为 Wikipedia 阻止了 LWP::Simple 使用的 HTTP 用户代理字符串。

如果您尝试使用它,您将收到“403 Forbidden”响应。

尝试使用 LWP::UserAgent 模块来解决这个问题,设置代理属性。

于 2008-08-23T20:48:56.897 回答
5

另请参阅与 Mediawiki 相关的 CPAN 模块 - 这些模块旨在访问 Mediawiki 站点(维基百科就是其中之一),并且可能比简单的 LWP 为您提供更多的花里胡哨。

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

于 2008-09-16T14:23:25.420 回答