こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

perlでHTMLソースを解析してformタグの要素を取得したいのです

perlでHTMLソースを解析してformタグの要素を取得したいのですが、そのようなライブラリはありますか?
できれば、javascriptでHTMLソースから情報を得られるようなAPIだと良いのですが。
即ち、document.forms[].actionとかdocument.forms[].elements[].valueのように。

投稿日時 - 2010-09-30 10:15:04

QNo.6217784

すぐに回答ほしいです

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

私ならMechanizeを使いますが。
他の方の書き込みも美しいですなぁ。

WWW-Mechanize
http://search.cpan.org/~petdance/WWW-Mechanize-1.66/lib/WWW/Mechanize.pm


#!/usr/bin/perl
use strict;
use WWW::Mechanize;
use encoding 'utf8';

my $mech = WWW::Mechanize->new;
$mech->get("http://www.google.co.jp/");

for my $form($mech->forms){
 printf("%s %s\n", $form->method, $form->action);

 my @names = $form->param;
 for(@names){
  printf(" %s => %s\n", $_, $form->param($_));
 }
 
 print "\n";
}

投稿日時 - 2010-10-02 12:38:31

お礼

ありがとうございます。
これ使えそうです。

投稿日時 - 2010-10-02 17:27:03

ANo.2

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

やり方は色々あるんですが、HTML::TagParserを使う方法を書きます。
表示がずれるので、空白2文字を全角空白にしてます。
use strict;
use warnings;
use HTML::TagParser;

my $page = << 'EOT';
<html>
 <head>
  <title>The Title</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 </head>
 <body>
  <hr />
  <form id="form1" method="get" action="print_env1.cgi">
   <input type="text" name="username" value="Anonymous" /><br />
   <input type="submit" name="Send" value="Send" />
  </form>
  <form id="form2" method="post" action="print_env2.cgi" enctype="multipart/form-data">
   <input type="text" name="username" value="Anonymous" /><br />
   <input type="submit" name="Send" value="Send" />
  </form>
 </body>
</html>
EOT

my $html = HTML::TagParser->new($page);
my @forms = $html->getElementsByTagName('form');

for my $elem (@forms) {
  my $tagname = $elem->tagName;
  my $attr  = $elem->attributes;
  my $text  = $elem->innerText;

  print "--- tagname", $/, $tagname, $/;
  print "--- attribute", $/;
  for my $key ( sort keys %{$attr} ) {
    print "$key=", $attr->{$key}, $/;
  }
  print "--- interText", $/, $text, $/;
}

# result
#
# --- tagname
# form
# --- attribute
# action=print_env1.cgi
# id=form1
# method=get
# --- interText
#
# --- tagname
# form
# --- attribute
# action=print_env2.cgi
# enctype=multipart/form-data
# id=form2
# method=post
# --- interText
#

投稿日時 - 2010-09-30 20:25:08

お礼

ありがとうございます。
参考にしてみます。

投稿日時 - 2010-10-01 07:54:31

あなたにオススメの質問