LWP::Simple을 사용하여 Wikipedia 페이지를 가져올 수 없는 이유는 무엇입니까?
문제
다음을 사용하여 Wikipedia 페이지를 가져오려고 합니다. LWP::단순, 하지만 그들은 돌아오지 않습니다.이 코드는:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
아무것도 인쇄하지 않습니다.하지만 다른 웹페이지를 사용한다면 http://www.google.com
, 잘 작동합니다.
Wikipedia 페이지를 참조하기 위해 사용해야 하는 다른 이름이 있습니까?
여기서 무슨 일이 일어날 수 있습니까?
해결책
분명히 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;
다른 팁
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 모듈을 사용하여 에이전트 속성을 설정해 보세요.
또한 미디어위키 관련 CPAN 모듈을 참조하세요. 이 모듈은 미디어위키 사이트(위키피디아가 그 중 하나임)를 방문하도록 설계되었으며 단순한 LWP보다 더 많은 기능을 제공할 수 있습니다.
제휴하지 않습니다 StackOverflow