为什么我不能使用LWP :: Simple提取维基百科页面?

时间:2020-03-05 18:42:28  来源:igfitidea点击:

我正在尝试使用LWP :: Simple提取Wikipedia页面,但它们没有回来。这段代码:

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

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

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

我还应该使用其他名称来指代Wikipedia页面吗?

这可能是怎么回事?

解决方案

回答

显然,维基百科阻止了L​​WP :: 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;

回答

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

如果尝试使用它,我们将收到" 403 Forbidden"响应。

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

回答

另请参阅与Mediawiki相关的CPAN模块,这些模块旨在访问Mediawiki网站(维基百科是其中之一),并且比简单的LWP可能给我们带来更多的麻烦。

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

回答

我们也可以只在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");