• 締切済み

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>内といったことも実行したいです。 どうかご教示お願い致します。

みんなの回答

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

yahooインデックス見たけど <a>タグは</a>タグで閉じられてる タグを抜き出すのか文字列なのかわからない 解答になってるのかもかわからないから参考に open KK,'yahoo.txt'; my $counter = 0; my $search = 4; # 4番目 while(<KK>){ if($_ =~ m[^<li.+>(.+)</a>]){ if($search){ $counter++; if($counter == $search){ print"$1\n"; } }else{ print"$1\n";} } } close KK;

perlhogehoge
質問者

お礼

ありがとうございます! 解決しました

  • hok212
  • ベストアンサー率66% (100/150)
回答No.1

基本形は次のような形式になると思います。 元ソースの次の部分を if($res->is_success) { print $content; } 次のように書き換えます。 if($res->is_success) { @lines = split(/\n/,$content); #ソース全部を改行コードで区切り配列に入れる foreach (@lines) { $_ =~ s/<li>(\w+)<li>/$1/i; # liタグの内側の文字列を取得 $line = $1; $line =~ s/<span>\w+</span>//ig; # spanタグおよび内側の文字列を消去 $line =~ s/<.*?>//g; #残りのタグを除去 print $line; } }

perlhogehoge
質問者

お礼

ありがとうございます! 解決しました

関連するQ&A