今日Web2.0をしらべていたときに、ここに「スクリーン・スクレイピング」っていう言葉が出てきて、なんじゃらほい?と思って調べたら、
あ、あれのことか。。
Yahoo!ファイナンス> ヘルプ> 口座管理サービス(MoneyLook)関連FAQ >データ取得の方法から、引用すると(以下斜体が、そこからの引用)
スクリーン・スクレイピング技術とは、ウェッブサイトの表示構成を解析し、必要な文字や数字だけを抽出する技術で、その抽出ルールをまとめたものをスクレイピング・モジュールと呼びます。
具体的に例をあげたほうがわかりやすいので、
無料で見れる、YAHOOの株価情報から、エイベックスの株価を抜く方法をしめそう。
YAHOOの株価情報で、検索時7860(エイベックスの銘柄コード)をいれるとわかるけど、
URLは、こんなかんじ。これで、株価が表示される
http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m
さて、このソースを取得するには、昨日のAJAXのプログラム、httpRequestのURLを上記のものにして、responseXMLをresponseTextにすると、テキストが取得できる。それを、テキストエリアに入れてみることにしよう(テキストエリアは、昨日のよりもっと大きくしてある)。
こんなかんじ
<?xml version="1.0"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>AJAX版?RSS読み取りだよ</title> <script language="javascript" type="text/javascript"> var httpObj; //*==============================================// //* 関数:httpRequest() *// // 内容:XML読み取り開始 *// //*==============================================// function httpRequest(target_url) { try { if(window.XMLHttpRequest) { httpObj = new XMLHttpRequest(); } else if(window.ActiveXObject) { httpObj = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert('エラーです'); return; } } catch(e) { alert('エラーです'); return; } // データを取得する httpObj.open("GET", target_url, true); httpObj.onreadystatechange = DataRead; httpObj.send(""); return; } //*==============================================// //* 関数:DataRead() *// // 内容:XML読み取ったあと *// //*==============================================// function DataRead() { if (httpObj.readyState == 4 && httpObj.status == 200) { document.form1.textarea1.value =httpObj.responseText; } } </script> </head> <body bgcolor="#ffffff" onload="httpRequest('http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m')"> <form action="" name="form1"> <textarea name="textarea1" rows="100" cols="80"></textarea> </form> </body> </html> |
(上記の < > ¥ は実際は半角)
で、これを実行すると、テキストボックスのなかに、検索した結果のソースコードが入ってくる。
ここで、(実際にこの結果を見ると、明らかなのだが)
「関連情報」という言葉の後にある行に、コード、事情、名称、時間、株価の順で(これ以降もつづく)はいっている。
っていうことは、そのresponseTextで受け取ったことばに検索をかけて、まず
1.「関連情報」を検索
2.直後のtrタグを検索
3.そのあとのtdタグを検索し、5個目の値をとってくれば、株価
ってことになって、ただで、株価が取得できるのだ!
このように、HTMLを解析して、値をとってくる技術を言う。
javascriptでやる場合、上記のように、responseTextでうけとって、あとは目印となる言葉を検索していくことによって、実現できる。
しかし、大きな問題がある。
実は、これをやってみるとわかるのだが、何の前触れもなく、見た目はそっくりなんだけど、タグをマイナーチェンジしていることがある。
その場合、引っかからなくなってしまったりする。
そーすると、プログラム書き換えとなるが、それは面倒なので、抽象的な形でパターンを記述して、ちょっとぐらいかわっても、値を取得できるようにしないとたいへん。
むかし、検索結果を表示するので、それをやって、困ったことを思い出した。