ルモーリン
ホーム 更新 Perl Sample サービス 雑談 鉄ゲタ Linux リンク 連絡先

Perlサンプル19 サイトの情報を取得

2020-02-11

北海道日本ハムファイターズの選手一覧を取得します。 動かしてみて分かったのですが、このコードでは栗山監督の名前も入ります。

#!/usr/bin/env perl

use v5.26;
use utf8;
use warnings;
use strict;

use feature "say";
use open IO => ":utf8";

use Encode::Locale;
use HTML::TagParser;
use WWW::Mechanize;

binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

my $mc = WWW::Mechanize->new;

say "トップページを開く";
$mc->get("http://npb.jp");
# 正常に開いたはず
$mc->success or die;
say "URL:" . $mc->uri;
say "タイトル:" . $mc->title;

say "選手一覧をクリック";
$mc->follow_link(text => "選手一覧");
# 正常に開いたはず
$mc->success or die;
say "URL:" . $mc->uri;
say "タイトル:" . $mc->title;

say "チームをクリック";
# textで拾えないのでtext_regexで拾う
$mc->follow_link(text_regex => qr/北海道日本ハムファイターズ/, n => 2);
# 正常に開いたはず
$mc->success or die;
say "URL:" . $mc->uri;
say "タイトル:" . $mc->title;

# 選手一覧
my $tag = HTML::TagParser->new($mc->content);

# 「class="rosterRegister"」と書かれたタグすべてを取得
my @player = $tag->getElementsByClassName("rosterRegister");
# <td class="rosterRegister">栗山 英樹</td>
# <td class="rosterRegister"><a href="/bis/players/01905133.html">斎藤 佑樹</a></td>
# <td class="rosterRegister"><a href="/bis/players/41245138.html">生田目 翼</a></td>
# <td class="rosterRegister"><a href="/bis/players/41545132.html">加藤 貴之</a></td>
#  :
# 以下省略

# 選手名を表示(1人目は監督だった)
say "選手一覧";
say $_->innerText for @player;
トップページを開く
URL:http://npb.jp
タイトル:NPB.jp 日本野球機構
選手一覧をクリック
URL:http://npb.jp/bis/teams/
タイトル:選手一覧 | NPB.jp 日本野球機構
チームをクリック
URL:http://npb.jp/bis/teams/rst_f.html
タイトル:北海道日本ハムファイターズ 2019年度 選手一覧 | NPB.jp 日本野球機構
選手一覧
栗山 英樹
斎藤 佑樹
生田目 翼
加藤 貴之
上沢 直之
有原 航平
浦野 博司
吉田 輝星
金子 弌大
上原 健太
宮西 尚生
マルティネス
ハンコック
井口 和朋
鍵谷 陽平
村田 透
バーベイト
堀 瑞輝
西村 天裕
中村 勝
柿木 蓮
秋吉 亮
福田 俊
ロドリゲス
田中 瑛斗
田中 豊樹
高山 優希
公文 克彦
鈴木 遼太郎
石川 直也
宮台 康平
立田 将太
玉井 大翔
藤岡 貴裕
吉川 光夫
杉浦 稔大
吉田 侑樹
北浦 竜次
清水 優心
鶴岡 慎也
宇佐見 真吾
黒羽根 利規
郡 拓也
田宮 裕涼
石川 亮
實松 一成
杉谷 拳士
田中 賢介
中田 翔
中島 卓也
松本 剛
清宮 幸太郎
渡邉 諒
野村 佑希
谷内 亮太
石井 一成
平沼 翔太
難波 侑平
横尾 俊建
髙濱 祐仁
今井 順之助
谷口 雄也
大田 泰示
西川 遥輝
近藤 健介
淺間 大基
白村 明弘
森山 恵佑
姫野 優也
万波 中正
岸里 亮佑
王 柏融
森本 龍弥
海老原 一佳