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