【perl】LWP module

來源:互聯網
上載者:User

標籤:

LWP (short for“Library for World Wide Web in Perl”)是一個由多個模組組成,用來擷取網路資料的的模組組。

【LWP::Simple】

通過調用 get($url) 函數,就可以得到相關網址的內容。如果沒有發生錯誤,get 函數返回此網頁,否則,返回 undef。

LWP::Simple 在做簡單的工作時很方便。但因為不支援 cookies,使用者認證,對 HTTP request header (請求標題)的編輯,和 HTTP resonse header(響應標題)的讀寫(主要是 HTTP 的 error message)。因此,當需要這些特性的時候,就要使用 LWP Class 模型。

【LWP::UserAgent和HTTP::Response 】

在眾多的 LWP Class 裡,LWP::UserAgent 和 HTTP::Response 是必須理解的。LWP::UserAgent 就像一個虛擬瀏覽器用來作 request (請求)。HTTP::Response 用來儲存 request (請求) 產生的 response(響應)。

一個程式裡只需要一個 $browser object,但是每次發出一個 request,就會得到一個新的 HTTP::Response object。HTTP::Response object 有以下一些有價值的屬性:
一個 status code(狀態碼值),表示成功或失敗。你可以使用 $response->is_success 來檢測它。
http status line(http 狀態原因),觀察 $response->status_line 的結果.

MIME content-type(檔案類型)通過 $response->content_type 來獲得。例如 “text/html”,”image/gif”,”application/xml” 等等。
content of the response(響應返回的內容)儲存在 $response->content。內容可能是 html 格式。如果是 GIF 格式,$response->content 裡是二進位的 GIF 資料。
許多其他 methods 都可以在 HTTP::Response 和它的 superclasses (父 class) HTTP::Message 和 HTTP::Headers 裡找到。

添加其他 HTTP 要求 headers
request (請求) 常用的方法是 $response = $browser->get($url),但如果需要,你可以在 $url 後跟一個索引值的列表來給你的 request 加上其他 HTTP headers。象這樣 :
  $response = $browser->get( $url, $key1, $value1, $key2, $value2, … );

舉個例子,如果你要對一個只允許 Netscape 瀏覽器連入的網站發出請求,那就需要發出類似 Netscape 的 header,如下:
 my @ns_headers = (
  ‘User-Agent’ => ‘Mozilla/4.76 [en] (Win98; U)’,
  ‘Accept’ => ‘image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, image/png, **’,
  ‘Accept-Charset’ => ‘iso-8859-1,*,utf-8′,
  ‘Accept-Language’ => ‘en-US’,
 );
如果只是打算修改 User-Agent,可以通過 LWP::UserAgent 的 agent 方法把預設的agent ‘libwww-perl/5.65’(或者別的)改掉。
$browser->agent(‘Mozilla/4.76 [en] (Win98; U)’);

使用 cookies
預設的LWP::UserAgent對象像一個不支援cookies的瀏覽器一樣工作。有不只一種的辦法可以設定它的cookie_jar屬性,從而讓它支援cookies。“cookie jar” 是一個用來儲存 HTTP cookie 的容器。你可以把它存到硬碟(像Netscape使用cookies.txt一樣)或記憶體裡。存到記憶體裡的 cookies 會在程式完成後消失。
記憶體式的 cookie 使用方法:$browser->cookie_jar({});也可以把 cookie 儲存到硬碟的檔案裡:

use HTTP::Cookies;my $cookies=HTTP::Cookies->new(   ‘file’ => ‘/some/where/cookies.lwp’, # 儲存 cookies 的地址   ‘autosave’ => 1,# 當完成後自動儲存到硬碟裡 )$browser->cookie_jar($cookies );
檔案裡的 cookie 是以 LWP 自定的格式儲存,如果你想在 netscape 裡使用這個 cookie 檔案,可以使用 HTTP::Cookies::Netscape class :

use HTTP::Cookies;# yes, loads HTTP::Cookies::Netscape toomy $ns_cookies=HTTP::Cookies::Netscape->new(   ‘file’ => ‘c:/Program Files/Netscape/Users/DIR-NAME-HERE/cookies.txt’,       # where to read cookies);$browser->cookie_jar($ns_cookies );
你也可以象上面一樣使用 ‘autosave’ => 1 。 但 Netscape 的 cookie 有時會在寫入硬碟之前就被丟掉,至少在寫這篇文章的時候還是這樣。

通過 POST提交表格
大部分HTML表格使用HTML POST 向伺服器提交資料,在這裡你可以這樣:
$response = $browser->post( $url,
  [
    formkey1 => value1,
    formkey2 => value2,
    …
  ],
);
或者你也可以把 HTTP header 也一起發出
$response = $browser->post( $url,
  [
    formkey1 => value1,
    formkey2 => value2,
    …
  ],
  headerkey1 => value1,
  headerkey2 => value2,
);

使用LWP 訪問 人人網由於renren訪問使用者資料需要登陸才能完成,所以單純的去抓取肯定步行,所以必須類比登陸記錄cookies,使用lwp模組可以完成:


#!/usr/bin/perluse strict;use warnings;use HTTP::Request;use HTTP::Cookies;use LWP::UserAgent;my $url         = ‘http://passport.renren.com/PLogin.do‘;# 用來存 cookiemy $cookie_jar  = HTTP::Cookies->new(file        => "./acookies.lwp",autosave    => 1,);# 給處理 cookie 的對象放到 LWP::UserAgent 中來處理 cookie# 登陸中my $browser = LWP::UserAgent->new;my $cookies = $browser->cookie_jar($cookie_jar);$browser->agent(‘Mozilla/9 [en] (Centos; Linux)‘);my $res     = $browser->post( $url,[email     => ‘XXXX‘,password    => ‘XXXXXX‘,origURL   =>‘http//www.renren.com/home‘,domain => ‘renren.com‘,],);#現在可以訪問裡面的好友了#$res =$browser->get(‘http://www.renren.com/home.do‘);$res =$browser->get(‘http://www.renren.com/235018505?pma=p_profile_m_pub_friendslist_a_profile‘);print $res->content();

參考:http://blog.mcshell.org/2012/03/19/perl-lwp-simple-use.html



【perl】LWP module

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.