为什么我不能使用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页面吗?
这可能是怎么回事?
解决方案
回答
显然,维基百科阻止了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;
回答
因为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");