|
模块解释
链接检查
网页增长得很快,每个网站可能有很多的(比如千个以上的连接),现在该是我们做某些事的时候了。特别是,寻找,修正,删除他们的时候。 我当然不会点击这么多的连接去看他们是否正常。我们需要一个程序来做这些事情。yahoo列出了这些检查网页的程序,但是没有发现任何一个程序是:简单,免费,为了我的连接。
特性
我们称这个“linkcheck”。为了在网页上检查这个连接,我们可以这样写: linkcheck http://my.isp.com/page.html 这个程序会给我们这样的报告 :
Checked 1 pages, 49 links Found 0 broken links
-r 正如所展示的,linkcheck检查一个网页上的所有的连接,但是我们希望检查在一个站点上的所有的连接。我们可以通过找到到其它网页的连接,再检查那些网页来做到。 linkcheck -r http://my.isp.com/page.html Checked 144 pages, 1025 links Found 3 broken links
如果我们检查所有的连接,我们可能不可能结束像蜘蛛网一样的网络。为了避免这些,我们应该仅仅只检查在我们自己网页上的连接 。
-o
我们一般不想检查那些脱机的网页,但是我们仍有可能要检查这些脱机的网页。如果我们想要检查脱机的网页的话,我们可以设置-o这个标志位。 linkcheck -o -r http://my.isp.com/page.html Checked 144 pages, 1131 links Found 3 broken links
-v verbosity
如果我们找到了那些坏的连接,我们有可能想知道这些连接是什么。-v verbosity 这个标志位控莆颐堑玫降氖涑龅氖俊? -v 0 显示 坏连接的数量 (默认) -v 1 同时列出坏连接 -v 2 同时列出检查的网页 -v 3 同时列出检查的连接
-t twiddle
网页可能要花很长的时间来下载。当我们在等待的时候,我们总想看一些输出的结果,以此来知道程序在做一些事情,也因此我们不会感到太无聊。我们可以使用 -v 标志,但是可能要把结果输出到一个文件或是一个管道。因此,我们提供了这个标志。
-t 0 什么也没有(默认) -t 1 徽调控制项: | / - -t 2 程序报告:"$Pages pages, $Links links, $Broken brokenr" 输出是输出到标准输出,twiddle的是从标准错误输出的。这个我们是可以重定向的。它也确保了twiddle不会从缓冲中读取,它展示的是实时的。
运算法则 这是检查一个网页的大体的大钢。 给定一个url,我们必须 从url解析主机名, 打开一个tcp连接到服务器, 发送一个http请求, 接收一个http响应, 处理重定向 , 从http响应中解开html网页, 解释出这个网页中的所有的连接, 处理相关连接, 检查每个连接的后辍名, 为了把这个算法转化成一个程序,我们必须 解析命令行, 确定腹鸣机连接, 为已经访问的网页和检查的连接做个记号 , 产生文件 , 从最原始的开始做这个工作将是个很大的工作。幸运的是,我们不必这么做。大多数繁重的工作别人已经做好了,而且做成了模块提供了。这里是linkcheck所用到的模块, Getopt::Std HTML::Parser LWP::UserAgent Pod::Usage URI
使用这些模块,我们可以使用仅仅几百行的代码来构成这个程序。在以下的部份,我们展示怎样编写这个程序。
模块
首先,我们复习一下模块 Getopt::Std Getopt::Std 解析命令行的选项。更详细的说明参见GetOpt::.
URL URL管理URL: 每个URL的对象代表一个单一的URL。URL可以有很多的方法来构建操作,分析URL,但是我们仅仅需要其中的 一些功能。 创建一个URL对象,我们这样写: $uri = new URI 'http://my.isp.com/page1.html#section1'; 我们可以用new_abs来分解相关连接 $uri2 = new_abs 'page2.html', $uri; # http://my.isp.com/page2.html
访问器解开一个url的成分: $uri->scheme; # http $uri->authority; # my.isp.com $uri->fragment; # section1
传送一个参数到访问器,设置那个成份。空的成份代表没有定义: $uri->fragment('section2'); # http://my.isp.com/page1.html#section2 $uri->fragment(undef); # http://my.isp.com/page1.html
as_string() 方法返回一个代表url对象的字符。我们可以使用Url对象在任何可以使用字符的地方: print "$urin"; $Visited{$uri} = 1;
LWP::UserAgent
LWP是在perl中用来访问www的一个库。我们用它来得到web页面。也许得到一个网页的最简单的方法是使用LWP::Simple这个模块。 use LWP::Simple; $content = get($uri); get() 这个方法返回了web页面的内容,失败时返回undef.然而,我们需要更进一步的信息,所以我们应该使用LWP::UserAgent这个模块。 一个user agent是任何http client类型。LWP::UserAgent在perl中执行一个http client.为了得到一个web页面,我们产生一个LWP::UserAgent对象, 发送一个http请求,接收一个http响应。
$ua = new LWP::UserAgent; $request = new HTTP::Request GET => $uri; $response = $ua->request($request);
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页12 3 4 下一页
上一篇:联网调试CGI程序心得 下一篇:Perl的运算符号字符概述
|