HTMLのスクレイピングを補助するライブラリを書いたのでアップしてみる(・ω・)
jQueryなど、メジャーどころのライブラリを使用できない特殊環境用です。
メジャーライブラリ使えない人以外は、普通にjQueryなどを使うのがおすすめ!
あ。ちなみにMIT Licenseです。
クラス名:
findTags
利用可能メソッド:
☆条件にマッチしたHTMLオブジェクトを一つだけ取得する
・docfind()
・find()
☆条件にマッチしたHTMLオブジェクトを全て取得する
・docfindAll()
・findAll()
☆HTMLオブジェクトを指定する(これは単体では使用しません)
・elem()
ちなみにdocfind(All)は「document find(All)」という名前を略しました。
docfind, docfindAll は常に”document”全体から検索します。
find, findAllは初回実行時は”document”を親として検索しますが、二回目以降は前回検索して得たHTMLオブジェクトを親として検索します。
例えば…
1. docfindやfindで div id=’result’ を検索。
2. 再度findで div id=’result’ を検索すると、1で得たHTMLオブジェクトにぶら下がっている div id=’result’ を検索します。docfindだと、document全体から再検索します。
使い方:
1. インスタンス作成
[javascript]
var d = new findTags();
[/javascript]
2. docfind, docfindAll, find, findAllでHTMLオブジェクトを検索できます。
@第1引数 … タグ名
@第2引数 … アトリビュートのハッシュ ※アトリビュートを特に指定しない場合は空ハッシュでOKです
[javascript]
// div id=’result’ を検索して得る ※存在しない場合は、falseが返ります
var resultHTML = d.docfind(‘div’, {‘id’:’result’}).html;
// p class=’price’ を全て得る(配列が返ります) ※存在しない場合は空配列を返します
var pArrayHTML = d.docfindAll(‘p’, {‘class’:’price’}).html;
// li タグを一つだけ取得
var li = d.docfind(‘li’, {}).html;
// li タグを全部取得
var li = d.docfindAll(‘li’, {}).html;
// a href=’item.html’ class=’price’ を取得
// (find, docfindAll, findAllでも使えます)
var a = d.docfind(‘a’, {‘href’:’item.html’, ‘class’:’price’}).html;
// docfind, findはHTMLオブジェクトを返すことができるので、
// 直接値を取り出すことも可能です。
// ただし、この方法だとHTMLが存在しない場合に
// 「(例)hrefなんて無いよ」などといったエラーが出るので
// あまりオススメしません。
var a = d.docfind(‘a’, {‘class’:’price’}).html.href;
var a = d.docfind(‘a’, {‘class’:’price’}).html.childNodes[0].nodeValue;
[/javascript]
docfind, findはそのまま連結することができます
[javascript]
// div id=’result’ の下の p class=’price’を一つ取得し、
// さらにその下のspanタグを一つ取得
var spanHTML = d.docfind(‘div’, {‘id’:’result’}).find(‘p’, {‘class’:’price’}).find(‘span’, {}).html;
// docfind, findの後ろにはfindAllもつなげることもできます
var pArrayHTML = d.docfind(‘div’, {‘id’:’result’}).findAll(‘p’, {‘class’:’price’}).html;
[/javascript]
すでにHTMLオブジェクトを持っており、その下に含まれるHTMLを検索したい場合は、elem()で親を指定することができます。
[javascript]
var doc = document.getElementById(‘result’);
// id=’result’下にある p class=’price’ を一つ取得
var price = d.elem(doc).find(‘p’, {‘class’:’price’}).html;
// id=’result’下にある p class=’price’ を全部取得
var price = d.elem(doc).findAll(‘p’, {‘class’:’price’}).html;
[/javascript]
と、まぁこんな感じです。使いたい方はどうぞー(。・ω・)ノ
バグ報告・ご要望は@wg_koroまでお願いします。
1件のコメント