Perl で WWW::Mechanize や Web::Scraper を使ってWebサイトをスクレイピングしたことはあるが、画面遷移に JavaScript を使っている場合、どうすればよいか調べてみた。
例えば以下のように JavaScript を使ってリンクしている場合。
<a href="javaScript:next(2)">次へ</a>
WWW::Scripter と WWW::Scripter::Plugin::JavaScript をインストールして*1、
% cpanm -f WWW::Scripter % cpanm -f WWW::Scripter::Plugin::JavaScript
こんな具合に WWW::Scripter の eval で JavaScript の関数を呼んでやると画面遷移することができた。
#!/usr/bin/env perl use strict; use warnings; use WWW::Scripter; my $URI = 'http://...'; my $w = 'WWW::Scripter'->new(); $w->use_plugin('JavaScript'); $w->get("$URI"); $w->submit_form( form_name => 'oss_query', fields => { c_keywords => '11gR2', }, ); $w->eval('next(2)'); print $w->content; __END__
関連
- WWW::Mechanize をインストールした - ablog
- WWW::Mechanize と Web::Scraper を使って HTML からテキストを抽出して CSV を作成する Perl スクリプト - ablog
- WWW::Mechanize::AutoPager を使ってみた - ablog
- WWW::Mechanize::AutoPager + Web::Scraper で HTML からテキストを抽出して CSV を作成してみた - ablog
- Web::Scraper の filter が便利 - ablog
- Parse::RecDescent を使ってみる - ablog
- form の hidden をスクレイピングしたメモ - ablog
*1:WWW::Mechanize はインストール済み