ASP,VBSでAccessデータベース操作 他のホームーページ(HTMLソース)を取り込んだ後、必要なデータを抽出する。

ASPにより他のホームページ(HTMLソース)を取り込むことに成功した。
ソース全てを1行ごとに読み込み、Instr関数を使用して文字列検索をして
所定の場所の値を取り込んで、テキストに書き込む。

前回、ASPで他のホームページを取り込み、1行ずつ抽出することに成功した。

次はHTMLソースを1行ずつ読み込んで、所定のデータがある部分を取り出す。
<HTML>
<HEAD>
<TITLE>Test</TITLE>
</HEAD>
<BODY>
<%
Dim objFS, objTS
Dim k(10),l(10)
str=""
Url = "http://markets.nikkei.co.jp/"
Set objHTML = Server.CreateObject("MSXML2.ServerXMLHTTP")
Set objDOB = Server.CreateObject("ADODB.Stream")

objHTML.Open "GET", Url, false
objHTML.Send
With objDOB
 .Open
 .Type = 1 'バイナリデータ
 .Write objHTML.responseBody 'ADODB.Streamオブジェクトへ書き込み
 .Position = 0
 .Type = 2 'テキスト
 .Charset = "_autodetect" 'charset
 strHTML = .ReadText 'Textとして読み出す
 .Close
End With
strtmp=Split(strHTML,chr(10))
For Each strtmp1 In strtmp
 If Instr(strtmp1,"stocksIndexrRate")>0 Then
  strtmp2=Split(strtmp1,">")
  strtmp3=Split(strtmp2(2)," ")

  Response.Write strtmp3(0)&"<br>"
  str=str&strtmp3(0)&chr(10)
 End If
 If Instr(strtmp1,"NYダウ")>0 Then
  k(0)=1
 End If
 If k(0)=1 Then
  l(0)=l(0)+1
 End If
 If l(0)=3 Then
  strtmp2=Split(strtmp1,">")
  strtmp3=Split(strtmp2(2),"<")
  Response.Write strtmp3(0)&"<br>"
  str=str&strtmp3(0)&chr(10)
 End If
 If Instr(strtmp1,"ナスダック")>0 Then
  k(1)=1
 End If

 If k(1)=1 Then
  l(1)=l(1)+1
 End If

 If l(1)=3 Then
  strtmp2=Split(strtmp1,">")
  strtmp3=Split(strtmp2(2),"<")
  Response.Write strtmp3(0)&"<br>"
  str=str&strtmp3(0)&chr(10)
 End If
 If Instr(strtmp1,"ドル(円)")>0 Then
  k(2)=1
 End If
 If k(2)=1 Then
  l(2)=l(2)+1
 End If
 If l(2)=3 Then
  strtmp2=Split(strtmp1,">")
  strtmp3=Split(strtmp2(2),"<")
  Response.Write strtmp3(0)&"<br>"
  str=str&strtmp3(0)&chr(10)
 End If
Next
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTS = objFS.CreateTextFile(Server.MapPath("test5.txt"),true)
objTS.Write str
objTS.Close
%>
</BODY>
</HTML>

前回のおさらいをかねてソースを全て書き出した。

まず、配列を使用する場合Dimで宣言しておかないとエラーとなる。

Dim k(10),l(10)

Set objHTML = Server.CreateObject("MSXML2.ServerXMLHTTP")

With〜EndWithでstrHTMLに改行を含めて1行でHTMLデータが入る。

1行ごとに文字列解析を行いため、chr(10)で分割してstrtmpに入れる。

strtmp=Split(strHTML,chr(10))

strtmp(0)〜strtmp(最後)まで1行ずつ取り出したいためFor分を使用する。

For Each strtmp1 In strtmp

Next

1行ずつstrtmp1に入って行く。

strtmp1にHTMLソースが1行ずつ入っていくので、所定の値がある文字列をInstrで検索する。

If Instr(strtmp1,"stocksIndexrRate")>0 Then

End IF

ちなみにstocksIndexrRateは株価があるところ。

strtmp1にはHTMLのタグが含まれているので、数値だけ取り出す。

タグで囲まれているため、"<"や">"でsplitで分割して取り出す。

strtmp2=Split(strtmp1,">")
strtmp3=Split(strtmp2(2)," ")

strtmp3に数値だけとなるので、strに連結していく。splitで分割できるようにchr(10)も連結しておく。


一発で検索できない数値もあるので、その方法も紹介する。

数値の2行前に必ず独立した単語がある場合があるので、それがあったらフラグを立てて、フラグがたったら行数を足して行き、既定の行数になったらデータを取り出す。

If Instr(strtmp1,"ナスダック")>0 Then
 k(1)=1
End If
If k(1)=1 Then
 l(1)=l(1)+1
End If
If l(1)=3 Then



End IF

最後にCreateTextFileでテキストに書き出す。

以上で値の抽出は完了。

次は問題の値を抽出した後、Accessにデータを書き込む。


サンプルソースはこちら




実践!ASPでAccess操作