URLとXPathを渡すと値を返すツールをもっと極悪ぶっこ抜きができるツールに改造してる
値がとれるだけでは退屈、ページ辿りたいし、その先も辿りたいので機能追加。ずいぶんたくましくなりました。あとはキャッシュができればいいですねー。
追加したオプション
- n
- 次のページ(別に次じゃなくてもいいけど)のURLを返してくれるXPath、いっぱいマッチさせても最初の1つしかたどりません
- d
- ページを辿る回数、デフォルト1
- s
- HTML::Elementがマッチしてる場合にHTMLソースを吐く
- f
- 処理しているURLも出力し、結果の値の前にはタブがついているフォーマット(いまひとつなのでなんとかしたい)
- URLのかわりに-
- 標準入力から改行区切りでURLをうけとる
ためす
twitterのfollowingリストを0回ページ継ぎ足しして、そこから抽出したユーザリストのfavoritesをさらに確認、彼らのfavってるユーザ名を集計する。
% alias exthtml="perl /Users/ec/bin/exthtml.pl -a Mozilla -c ~/Library/Cookies/Cookies.plist" % exthtml -X '//strong/a[@rel="contact"]/@href' -n "//a[contains(@rel, 'next')]/@href" \ -d 0 http://twitter.com/friends | perl -ne 'chomp;print "${_}/favourites\n"' | \ exthtml -X '//*[@class="content"]/strong/a/text()' -s - | sort | uniq -c 5 33 1 4316 1 8am 1 941 1 AirReader 2 Hamachiya2 1 IronNine 1 Johnny_S (snip) 1 yoppy 6 youpy 1 yugui 2 yuiseki 3 yukichi 1 yusukebe 2 yuyarin 1 yuzupepper 1 zammersonic
もちろん前のほうのexthtmlの-dをふやせばfollowing全員たどれるし、後のほうのexthtmlに-n、-dをつければどんどん深く辿れてべんり。両方-d 10000ぐらいにしたら過去のfavoritesぜんぶとれます。だけどtwitterのサーバは貧弱なのであんまり叩くと死にそうでこわいですね。