[Perl] Web::Scraper 0.15とcisco_scraper.pl
以前書いた Web::ScraperでCISCO RECORDSをスクレーピングという記事に対してBig Sky :: Web::Scraper 0.15で何が変わったのか...とおまけでWeb::Scraper 0.15での添削例として扱ってもらったので、さらにリプライ。
treeを壊さずやるとすれば、TextNodeを参照するのがいいかと思います。 例えば、XPathのnode()を使い、番号指定で取得します。だた現状のWeb::ScraperではTextNodeはショートカットで参照出来ませんので、以下のようにstring_valueを返すように手を加えると上手く行きます。問題が一つ。 添削してくださったパッチだと
process '//li/node()[4]', 'title' => sub {$_->string_value;};
となっているのですが、4番目とは限らないんです。
たとえば、
http://www.cisco-records.co.jp/html/item/004/010/item393180.html
は何曲か試聴サンプルがないために、この処理だと取得できないです。
process '//p[@class="de_star"]/node()[2]', 'star' => sub {$_->string_value;};
こちらは例外がないのでばっちり動きます。
更にさっきアップされていた0.16では
0.16 Tue Sep 18 04:48:47 PDT 2007
- Support 'RAW' and 'TEXT' for TextNode object
ということなので
process '//p[@class="de_star"]/node()[2]', 'star' => 'TEXT';
でも、大丈夫でした。
あと、相対URLの展開ですが、今のところコールバック関数内では展開されないようです。
なので、添削していただいたものでは意図するように動かないようです。
ただ、こっちは深く追っていないので定かではありません。つっこみ歓迎です。
ともかく、フィードバックありがとうございました。
大変勉強になりました。
