2012-07-21 211 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

相关问题