LWP::Simple을 사용하여 Wikipedia 페이지를 가져올 수 없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/24546

  •  09-06-2019
  •  | 
  •  

문제

다음을 사용하여 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.아래 문서를 읽을 수 있습니다.수정해야 할 차이점은 많지 않습니다.

http://lwp.interglacial.com/ch12_02.htm

Wikipedia가 LWP::Simple에서 사용하는 HTTP 사용자 에이전트 문자열을 차단하고 있기 때문입니다.

이를 사용하려고 하면 "403 Forbidden" 응답을 받게 됩니다.

이 문제를 해결하려면 LWP::UserAgent 모듈을 사용하여 에이전트 속성을 설정해 보세요.

또한 미디어위키 관련 CPAN 모듈을 참조하세요. 이 모듈은 미디어위키 사이트(위키피디아가 그 중 하나임)를 방문하도록 설계되었으며 단순한 LWP보다 더 많은 기능을 제공할 수 있습니다.

http://cpan.uwinnipeg.ca/search?query=미디어위키&mode=dist

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top