perl&LWP 综述

Perl&LWP这本书讲的是Perl 里面用来完成HTTP方法的lib。

 

开篇有句话写的好。三件事让web服务成为可能:HTML编码、HTTP传递、URL来定位。要理解这三件事,才能透彻的用perl完成浏览器完成的工作。

 

基于此,用perl完成浏览器完成的工作必须要满足:分析URL、提取HTML、构造HTTP方法、解析HTML。

 

【开始使用Perl】

#!usr/bin/perl

#test.pl

print 'hello world!';

 

$perl test.pl

 

【使用CPAN】

先看看你装了CPAN没有?

%perl -MCPAN eshell

如果是这样的:

CPAN>

ok 你进入了CPAN的shell。在这个shell下你可以安装LWP的模块。

CPAN>install Bundle::LWP

 

【开始使用LWP】

例1-1 统计O’Reilly主页上提及“Perl”的数目:


#!/usr/bin/perl -w
use strict;#这是什么意思?
use LWP::Simple;

my $catalog = get(“http://www.oreilly.com/catalog”);#使用get方法
my $count = 0;
$count++ while $catalog =~ m{Perl}gi;#进行匹配
print “$count/n”;#打印出统计数目

 

#中文是天生的注释语言,跟英文放在一起,一目了然^_^

 

打印出来的结果是

如果get错了,就会返回undef,在perl里undef的意思就是什么都没有。

【LWP::UserAgent】

LWP::Simple是一种最简单的面向对象接口实现。还有更多更强大的实现。如LWP::UserAgent,所谓的用户代理,可以是浏览器,也可以是Paros,也可以是1-2.pl

例1-2 标识服务器

#!/usr/bin/perl -w
use strict;
use LWP;

my $browser = LWP::UserAgent->new( );
my $response = $browser->get(“http://www.oreilly.com/”);#冒充浏览器get网页
print $response->header(“Server”), “/n”;#打印header里面的服务器标识

 

打印出来的结果是

 

【LWP::UserAgent的POST方法】

my $browser = LWP::UserAgent->new();
my $response = $browser->post(
‘http://www.example.com′,
['plate' => $plate,
'search' => 'Check Plate Availability'
],
);

 

这个应该根据你要提交表单的页面内容要拟定。比如提交表单需要的其实是pwusername和pwpassword。

某个表单?

 

【HTML解析】

例1-4 提取image标签src属性值
#! /usr/bin/perl -w

use strict;
use LWP::Simple;
use HTML::TokeParser;

my $html = get(“http://www.oreilly.com/”);
my $stream = HTML::TokeParser->new(/$html);
my %image = ();#一个新数组

while(my $token = $stream->get_token){
if ($token->[0] eq ‘S’ && $token->[1] eq ‘img’) {
# store src value in %image
$image{ $token->[2]{‘src’} }++;
}
}

foreach my $pic (sort keys %image) {
print “$pic/n”;
}

 

结果是打印出标记变量。

HTML::TokeParser这个模块对象的get_token()方法,功能是从HTML返回一个标志。

TOken(标志)是数组引用。它的5种可能类型是:开始标志、结束标志、文本标志、注释标志、声明标志。

这里是开始标志,第一个元素是S#$token->[0] eq ‘S’ && $token->[1] eq ‘img’

$image{ $token->[2]{‘src’} }++;#把第三个元素都存进image数组里。

 

然后我来改一改,打印token的其他

第一个元素

哦,是S

第二个呢

是img

第四个呢

哎呀,看不懂看不懂,其实是包含每个标记属性的散列,最后一个元素是原文

 

当然还有其他类型的token,简单的说,token就是一种html里面保存信息的结构。解析html,就是把这个结构里的数据读出来,翻译为我们能理解的内容。

一个结束标志有三个元素:E、标志名和原文。

 

【使用TREE】

例1-5 利用树结构解析图片的地址
#! /usr/bin/perl -w

use strict;
use LWP::Simple;
use HTML::TreeBuilder;

my $html = get(“http://www.oreilly.com/”);
my $root = HTML::TreeBuilder->new_from_content($html);
my %images = ( );

foreach my $node ($root->find_by_tag_name(‘img’)){
$images{$node->attr(‘src’)}++;
}

foreach my $pic (sort keys %images){
print “$pic/n”;
}

 

使用Tree能够用一些方法更好的进行搜索等。上面这个的打印出来是:

打印出来是树状的img路径

 

【credentials方法】

LWP::UserAgent的credentials()方法可以添加认证信息(参数为远程机器名称、realm、用户名/密码)。参数relam表示 用户名密码应该输入到哪个受保护的表单或者区域中(有可能存在多个受保护的区域或者表单)。当我们使用LWP::UserAgent对象请求一个页面时, 如果有必要,可以填充认证信息。
参数“realm”是远程服务器要求你输入认证信息的窗口名称,一般情况下,realm是被引号引起来的。此外,查看远程服务器返回的头部信息,realm的值就是header中header中WWW-Authenticate的值,如WWW-Authenticate: Basic realm=”IamRealm”,则realm的值为IamRealm。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值