• ベストアンサー

LWP::UserAgent;の使い方

HTMLデータを取得しようと思いまして 以下のサイトのソースを使わせてもらっているのですが http://www.ksknet.net/perl/lwpuseragent_we.html 後半の取得結果を出力するところの print $res->content; の意味がよくわかりません。 これはどういう意味なのでしょうか? また、取得したHTMLコードを変数に格納したいのですが $resの中には無いようです、これも->contentが関係しているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

my $res = $ua->request($req); で,指定したURLを使用してクライアントからHTTPリクエストを投げ,その結果Webサーバから返ってくるHTTPレスポンスを変数$resとして受け取っている。 $res->is_success $res->status_line $res->header("Content-Type") $res->code $res->header("Server") などはすべて,そのHTTPレスポンスオブジェクトから取り出すことができるさまざまな属性値を参照するもの。 http://search.cpan.org/~gaas/libwww-perl-5.813/lib/HTTP/Response.pm $res->content もその一つで,Webサーバから返ってきたHTML全行をまとめて参照するメソッドです。 ANo.1で紹介された書き方ならHTML全行がまとめて$hensuに代入されますし, @lines = split(/\n/, $res->content); のように書けば,改行でHTML各行をバラして配列@linesに代入できます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.1

print $res->content; 取得したHTMLの中身をprint(ブラウザに出力)しています。 変数に格納したいのであれば、printの代わりに、変数を受け皿にして、 $hensu = $res->content; のようにすればOKです。

すると、全ての回答が全文表示されます。

関連するQ&A

  • LWPでHTTPSサイトからコンテンツ取得

    LWP::UserAgentを使用してHTTPSサイトから、 コンテンツを取得して解析処理をしたいのですが、 取得できなくて困っています。 Crypt::SSLeayやopensslを入れてアクセスは出来るようになったのですが、 HTTPサイトの場合 $ua = LWP::UserAgent->new; my $Req = HTTP::Request->new('GET', 'http://~'); my $Res = $ua->request($Req); my $content = $Res->content; これで、コンテンツのソースを取得できたのですが、 同じ用にhttpsサイトから取得しようしても 「<HTML></HTML>」だけしか取得できませんでした。 ちなみに my $content = $Res->as_string; としてみると、 HTTP/1.0 200 OK Content-Type: text/html Client-Date: Thu, 08 Dec 2005 08:01:10 GMT Client-Peer: *.*.*.*:8080 ←隠させてもらいます Client-Response-Num: 1 Refresh: 0; URL=https://~ という取得したいHTTPSサイトにジャンプするような 内容が取得できました。 どうにかしてコンテンツ内容を取得したいのですが、 そもそもHTTPSのコンテンツ内容を取得すること自体 出来ないのでしょうか? その場合代案等もありましたら、教えてください。 とても困っています。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 入力フォームを変数に格納

    Perlを始めたばかりの初心者です。 inputで入力した情報を変数として取得する方法は可能でしょうか? #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type=\"text\" name=\"name\"></p>\n"; print "</body>\n"; print "</html>"; 上記の入力フォームで、777と入力した場合、サーバーを経由しないで、777を変数に格納したいのですが、可能でしょうか? 宜しくお願いします。

    • ベストアンサー
    • Perl
  • LWPで意図したhtmlがダウンロード出来ない

    LWPライブラリを使ってhtmlソースをダウンロードし たいのですが、指定したURLを、ブラウザを使って閲 覧できる内容と、異なるhtmlソースがLWPでは取得さ れてしまい、困っています。 具体的にはSGD(http://www.yeastgenome.org)内の (http://db.yeastgenome.org/cgi-bin/SGD/locus.pl? locus=ACE2)で表示される内容の、htmlソースが欲し いのですが、何故かlocus.plスクリプト自体がダウ ンロードされてしまいます。IEなどで[名前をつけて 保存]した場合には、希望のhtmlソースが得られるの ですが... ソースコードは以下の通りです。 use strict; use LWP::UserAgent; &get_entry("ACE2.html"); sub get_entry { my($outfile_name) = @_; my $ua = new LWP::UserAgent; $ua->agent("AgentName/0.1 " . $ua->agent); my $req = new HTTP::Request POST => 'http://db.yeastgenome.org/cgi-bin/SGD/locus.pl?locus=ACE2'; $req->content_type('application/x-www-form-urlencoded'); $req->content('started=1&match=www&errors=0&searchstring=CLN3'); my $res = $ua->request($req); unless($res->is_success) { die "Bad luck this time : "; } open(F, "> ".$outfile_name) || die "file open error :"; print F $res->content; close(F); $res->content; }

    • ベストアンサー
    • Perl
  • Perl HTMLソースから特定のタグ抽出

    use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'https://www.yahoo.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; $proxy->agent('your own created browser name here'); # 任意 $proxy->timeout(60); # 任意 my $req = HTTP::Request->new('GET' => $URL); my $res = $proxy->request($req); my $content = $res->content; print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる) if($res->is_success) { print $content; } else { print 'HTTP エラーコード: ' . $res->code; } これで、HTMLソース全てを取得することはできましたが、 例えば、このソースはヤフーのコードを取得していますが、 ヤフーのコード内で<li></li> リストタグないの文字列がほしいのですが、 どのように抽出すればいいのでしょうか? ヤフーでは、下記のようになっていて <li><a hrf="???????????????">ここの文字列<span>写真</span><span>new</span></li> このソースからここの文字列を抽出させたいです。 さらに、1番目の<li>内、4番目の<li>内といったことも実行したいです。 どうかご教示お願い致します。

  • LWPでsubmitさせる方法

    http://xxxx.xxxx.jp/index.htmlにhttp://xxxx.xxxx.jp/submit.cgiからアクセスして subimitさせたいのですが、下記のcgiだとError: 405 Method Not Allowed と出てしまいます。 formの名前の指定とsubmitの指定方法が分かりません。何方か詳しい方ご教授お願いします。 **** http://xxxx.xxxx.jp/index.html *****  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <SCRIPT language="JavaScript"> <!-- function test(){ var test = document.Myform.ttt.value; alert(test); } //--> </SCRIPT><TITLE></TITLE> </HEAD> <BODY> <FORM name="Myform"><INPUT size="20" type="text" name="ttt"><INPUT type="button" value="送信" onclick="test()"></FORM> </BODY> </HTML> **** http://xxxx.xxxx.jp/submit.cgi ***** #!/usr/bin/perl use lib "lib"; use LWP::UserAgent; use HTTP::Request::Common qw(POST); my $url = 'http://xxxx.xxxx.jp/index.html'; my %formdata = ('ttt' => 'hellow'); my $req = POST($url, [%formdata]); $req->header( 'Accept' => 'text/html', 'User_Agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) ', 'Referer' => 'http://ranks1.apserver.net/share/regist.php?u=pinkpanty2', ); my $ua = LWP::UserAgent->new; my $res = $ua->request( $req ); print "Content-type: text/html;\n\n"; if ($res->is_success) { print $res->content; } else { print "Error: " . $res->status_line . "\n"; } exit();

    • ベストアンサー
    • Perl
  • LWPで応答データを取得できない

    お世話になります。 perl5でLWPを使用しているのですが、一部のサイトでデータを取得できず困っております。 具体的には my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); my $req = HTTP::Request->new(GET => "http://misshiki.blog7.fc2.com/?xml"); my $res = $ua->request($req); my $buf = $res->content; といった感じでRSSを取得したいのですが、$bufが空になってしまいます。 しかし、 $res->as_string とすると、レスポンスヘッダも含めてRSSが取得できていることが確認できます。 また、上記以外のURLでは正常に$res->contentでデータを取得することができています。 どうもFC2ブログのRSSのみの事象のようではあるのですが、対処方法がわからず困っております。 対策をご教授いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • LWPについて

    Perl,CGI初心者です。 LWPのUserAgent(もしくはSimple)を使ってWeb上のHTMLをGETして、そのHTMLの特定の部分を 出力するCGIプログラムを作成しています。 コマンドプロンプトで<perl "cgiプログラム>とすると想定通りの結果が得られるにも かかわらず、いざブラウザ経由で当該cgiにアクセスしようとすると、エラーにはなりま せんが、データがGETできていません。 何か原因は考えられるでしょうか? LWPを使用する際はApache側にも何か設定が必要なのでしょうか? Webサーバ:Windows XP,Apache2.2,Perl5.8.8

    • ベストアンサー
    • Perl
  • perlでHTTP Request Headersの情報を取得、表示す

    perlでHTTP Request Headersの情報を取得、表示するページを作成したい 当方初心者です。 apache上のCGI(perl)で、ブラウザから受け取った HTTP Request Headersの情報を取得、出力するページを作成したいのです。 調べると下記のようなサーバ環境変数の取得、表示方法は多数ヒットするのですが =================================================== #!/usr/bin/perl -- print << "DOC1"; Content-type:text/html\n\n <HTML><BODY> DOC1 print $ENV{'HTTP_USER_AGENT'}<br>\n"; print $ENV{'REMOTE_ADDR'}"; print << "DOC2"; </BODY></HTML> DOC2 =================================================== 今回は、環境変数からではなく、HTTP Request Headersから 直接ヘッダに格納された情報を取得したいのです 取得・表示したい情報は標準HTTPヘッダ情報に加え、 途中で経由するプロキシが追加するヘッダ情報です。 完成イメージとしては PHPの<? phpinfo() ?>で出力できる 添付画像にあるような形なのですが どのようにすればできるのでしょうか サンプルの形で教えて頂けると助かります 参考になるページでも結構です よろしくお願いします

  • perlのLWPがページによって、正常に作動しません?

    下記コードを書いたのですが、ページのソースを取得することができません。 どのように変えれば、取得することができますでしょうか? 因みに、URL部分を、 http://www.amazon.co.jp/gp/product/B000H9I0F6 とした場合は正常に取得できました。 お分かりになる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-Type: text/plain\n\n"; use LWP; use HTTP::Cookies; $url="http://www.amazon.co.jp/gp/product/B000GPEXX4"; $file="cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; exit;

    • ベストアンサー
    • CGI
  • [LWP?] 特定のCLASSの値だけ取得したい

    LWPを使って、特定のWebページを取得しました。 -- use LWP::UserAgent; $ua = LWP::UserAgent->new; $ua->agent("$0/0.1 " . $ua->agent); $req = HTTP::Request->new(GET => 'http://www.yahoo.co.jp/'); $req->header('Accept' => 'text/html'); # リクエストの送信 $res = $ua->request($req); # 出力のチェック if ($res->is_success) { print $res->content; #←ここが取得したあいたいです。 } else { print "Error: " . $res->status_line . "\n"; } -- この中から指定したclassのinnerTextだけ取得したいのですがどのようにしたらよいのでしょうか? 要は$res->contentに -- <BODY> <UL> <LI class=aaa>xxx1</LI> <LI class=aaa>xxx2</LI> <LI class=aaa>xxx3</LI> </UL> <UL> <LI class=bbb>yyy1</LI> <LI class=bbb>yyy2</LI> <LI class=bbb>yyy3</LI> </UL> </BODY> -- のような値が入っていてclass=bbbの「yyy1」~「yyy3」だけ取得したいのですが。 よろしくお願い致します。 (参考)LWP http://homepage3.nifty.com/hippo2000/perltips/LWP.html

    • ベストアンサー
    • Perl
MFC-J939DWNで縁無し印刷ができない
このQ&Aのポイント
  • MFC-J939DWNでハガキの縁無し印刷をする方法を知りたい
  • MacOSで無線LAN経由でMFC-J939DWNを接続しているが、縁無し印刷ができない
  • Microsoft Wordを使用してMFC-J939DWNで縁無し印刷を試みたがエラーが発生
回答を見る

専門家に質問してみよう