我正在尝试使用LWP::Simple获取维基百科页面,但它们没有回来。这段代码:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
不打印任何东西。但是,如果我使用其他网页,比如说http://www.google.com
,它可以正常工作。
我应该使用其他名称来引用维基百科页面吗?
这里会发生什么?
我正在尝试使用LWP::Simple获取维基百科页面,但它们没有回来。这段代码:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
不打印任何东西。但是,如果我使用其他网页,比如说http://www.google.com
,它可以正常工作。
我应该使用其他名称来引用维基百科页面吗?
这里会发生什么?
显然维基百科阻止了 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;
您也可以只在 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");
我使用LWP:RobotUA
代替解决了这个问题LWP::UserAgent
。您可以阅读下面的文档。您应该修改的差异不大。
因为 Wikipedia 阻止了 LWP::Simple 使用的 HTTP 用户代理字符串。
如果您尝试使用它,您将收到“403 Forbidden”响应。
尝试使用 LWP::UserAgent 模块来解决这个问题,设置代理属性。
另请参阅与 Mediawiki 相关的 CPAN 模块 - 这些模块旨在访问 Mediawiki 站点(维基百科就是其中之一),并且可能比简单的 LWP 为您提供更多的花里胡哨。