2012-07-21 216 views
2

只是爲了好玩,我正在編寫一個Perl程序來檢查給定的網站是否存在。出於我的目的,如果我可以進入我的瀏覽器,打開網址並獲得一個有意義的網頁(意思不是錯誤或「打開網頁失敗」消息),那麼網站就會存在。這樣做最好的方法是什麼?最終,我希望能夠爲我的程序提供數百個網址的列表。如何判斷網頁是否存在?

我在想我的名單上的每個網址,看看他們是否存在;然而,我對網絡並不太瞭解,所以這是做這件事的最好方法嗎?

+3

旁註:當你的程序將輪詢數百個網站的話,或許考慮履行其['robots.txt'(HTTP:// en.wikipedia.org/wiki/Robots_exclusion_standard)文件。 – stakx 2012-07-21 18:48:25

+2

@stakx,如果你只想從每個站點讀取一個頁面,只做一次,那麼robots.txt可能是矯枉過正的。不過,如果你反覆輪詢,那麼你應該檢查robots.txt。 – cjm 2012-07-21 18:54:27

+1

@cjm:同意。由於OP沒有說出某些服務器是否會被查詢不止一次,爲了以防萬一,我認爲這值得一提。 – stakx 2012-07-21 19:17:27

回答

5

使用庫在Perl(LWP)WWW:

#!/usr/bin/perl 
use LWP::Simple; 
my $url = 'http://www.mytestsite.com/'; 
if (head($url)) { 
    print "Page exists\n"; 
} else { 
    print "Page does not exist\n";; 
} 
+0

這樣做和只是「ping」服務器有什麼區別? – Nosrettap 2012-07-21 18:57:01

+4

服務器可能可用,但它可能不一定會提供Web內容。 – Reimeus 2012-07-21 19:01:25

+2

更不用說服務器可以忽略ping請求,但仍然可以提供web內容。 – cjm 2012-07-21 19:46:34

1

有沒有這樣的協議「ping網頁」的存在。你實際上不得不請求資源,如果它被提供,它就存在。有幾種方法去了解它,這裏有一對夫婦:

  1. Retrieving web pages with LWP
  2. 檢查現有的網頁可能就這麼簡單:

    #!/usr/bin/env perl 
    use strict; 
    use warnings; 
    use LWP::Simple qw(head); 
    head('http://www.perlmeme.org') or die 'Unable to get page'; 
    

同樣的解決方案命令行工具是lwp-request/HEADHEAD返回資源標題,例如內容大小,並且比獲取所有頁面內容快。

+0

這不會很慢,因爲我們是不是檢索整個網頁的內容。我需要的是知道他們的網頁是否存在。 – Nosrettap 2012-07-21 18:54:59

+0

您可以使用HEAD獲取網頁摘要而不是整個頁面。看我的編輯。 – 2012-07-21 19:04:11

相關問題