为什么我无法使用 LWP::Simple 获取维基百科页面?
题
我正在尝试使用获取维基百科页面 LWP::简单, ,但他们不会回来了。这段代码:
#!/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
. 。您可以阅读下面的文档。您无需修改太多差异。
因为维基百科阻止了 LWP::Simple 使用的 HTTP 用户代理字符串。
如果您尝试使用它,您将收到“403 Forbidden”响应。
尝试使用 LWP::UserAgent 模块来解决此问题,设置代理属性。
另请参阅与 Mediawiki 相关的 CPAN 模块 - 这些模块旨在访问 Mediawiki 网站(维基百科就是其中之一),并且可能会比简单的 LWP 为您提供更多功能。
不隶属于 StackOverflow