2008-08-23 30 views
10

我正在嘗試使用LWP::Simple來獲取Wikipedia頁面,但他們沒有回來。此代碼:爲什麼我無法使用LWP :: Simple獲取維基百科頁面?

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

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

不打印任何東西。但如果我使用其他網頁,例如http://www.google.com,它工作正常。

我還有其他一些名字可以用來指維基百科頁嗎?

這裏可能會發生什麼?

+0

請注意,您會收到「403 Forbidden」錯誤。 – Bryce 2013-08-13 17:21:35

回答

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; 
+0

我得到錯誤** 500無法連接到en.wikipedia.org:443**給定的維基URL,但爲了stackoverflow主頁http://stackoverflow.com,它給了403。 我已經添加`$ ua-> agent(「WikiBot/0.1」);`在調用`get`方法之前,這對很多網站都很有用,包括stackoverflow。但它仍然給維基頁面上的錯誤,上面提到的同樣的錯誤。 – 2016-04-18 07:12:40

4

因爲維基百科是由堵LWP使用HTTP用戶代理字符串::簡單。

如果您嘗試使用它,您將得到一個「403禁止」響應。

嘗試使用LWP :: UserAgent模塊來解決此問題,即設置代理屬性。

12

您也可以只設置在LWP的UA ::單模 - 剛剛導入$ UA變量,它會允許你修改底層的UserAgent:

use LWP::Simple qw/get $ua/; 
$ua->agent("WikiBot/0.1"); 
print get("http://en.wikipedia.org/wiki/Stack_overflow");