Web::Scraper + XML::LibXML
via http://b.hatena.ne.jp/mattn/20071016#bookmark-6186564
scraper シェル上で組み合わせたら便利なのではと思い試してみた。
$ cat foo.html <html> <body> <div><span>aaa</span>bbb</div> <div><span>ccc</span>ddd</div> </body> </html> $ scraper foo.html
とりあえず抽出したいテキストを使ったりしてノードを特定し、そのノードを表す XPath を表示する。
scraper> use XML::LibXML scraper> warn $_->nodePath foreach ( XML::LibXML->new->parse_string($tree->as_XML)->findnodes('//node()[.="bbb"]')) /html/body/div[1]/text() at (eval 46) line 1.
あとはその XPath を使っていつもどおり。
scraper> process '/html/body/div[1]/text()', WARN bbb at /usr/bin/scraper line 18. scraper> process '/html/body/div/text()', WARN bbb at /usr/bin/scraper line 18. ddd at /usr/bin/scraper line 18.
理想はこんなんかな。
scraper> process '//node()[.="bbb"]', XPATH /html/body/div[1]/text() at (eval 46) line 1.
使ってるモジュールが違うので簡単にはできそうもないけど。