ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

株価を無料で取得したり、検索結果を得るスクリーン・スクレイピング技術(AJAX版)と問題点

2006-05-30 15:39:52 | JavaとWeb

 今日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でうけとって、あとは目印となる言葉を検索していくことによって、実現できる。

 しかし、大きな問題がある。
 実は、これをやってみるとわかるのだが、何の前触れもなく、見た目はそっくりなんだけど、タグをマイナーチェンジしていることがある。
 その場合、引っかからなくなってしまったりする。

 そーすると、プログラム書き換えとなるが、それは面倒なので、抽象的な形でパターンを記述して、ちょっとぐらいかわっても、値を取得できるようにしないとたいへん。

 むかし、検索結果を表示するので、それをやって、困ったことを思い出した。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 更新料がタダに!ソースネク... | トップ | 眞鍋かをりさんがポットキャ... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事