Googleで検索して検索1位のサイトをダウンロードする。
弁理士関連で法律が年に1回変わるので学習ツールとか
作る際に、条文をダウンロードするのがなぁとおもっていたので
その元ネタでサンプル作成してみたよ。
Googleをキーワード検索して一番上にあるやつの
緑タイトルを拾ってそこにアクセスしてページソースをダウンロードする
というもの。エラー処理とかないので取扱いは慎重にした方が
いいですよ。
で以下、ソース。まさかCITEタグとは思いもしませんでした。
後はダウンロードした後にEXCELに加工して取り込めば楽できるな。
skeywordを他の法律に変えれば別の法律も取得できます。
法令検索の結果が一番に表示されるなら加工もしやすいかな・・・。
後はダウンロードした後にEXCELに加工して取り込めば楽できるな。
skeywordを他の法律に変えれば別の法律も取得できます。
法令検索の結果が一番に表示されるなら加工もしやすいかな・・・。
'//
'// 特許法のページソースを取得する
'//
'// Proxy環境の場合はDOSプロンプトで実行 netsh winhttp import proxy source=ie
Option Explicit
Dim sURI
Dim rgetHtml
Dim oFilename
Dim sKeyword
'// メイン部分
sKeyword = "特許法"
oFilename = "C:\temp\" + sKeyword +".txt"
sURI = getURL(sKeyword)
if sURI = False then
MsgBox "notComplete"
end if
rgetHtml = getHTML(sURI,oFilename)
if rgetHtml=True then
MsgBox "Complete"
end if
'// Googleでキーワード検索1位のURL(下に緑で出てる▼のやつ)を取得する
function getURL(sKeyword)
Dim objIE
getURL = False
Dim rURL
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.Navigate("https://www.google.co.jp/")
waitIE objIE
objIE.Document.getElementById("q").Value = sKeyword
WScript.Sleep 100
objIE.Document.all("btnG").Click
waitIE objIE
'// GoogleからURL取得
rURL =objIE.document.getElementByID("ires") _
.getElementsByTagName("li")(0) _
.getElementsByTagName("cite")(0) _
.innertext
'// 有無を言わさず先頭にhttp://を付ける・・・
getURL = "http://" + rURL
end function
'// URLを受取ってそのサイトの内容をtxt形式で保存する。
function getHTML(sURI,oFilename)
Dim http
Dim sHTML
Dim ADODB
'// 変数を初期化
getHTML = False
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Set ADODB = CreateObject("ADODB.Stream")
'//ページソースを取得
With http
.Open "GET", sURI, False
.Send
If .Status <> 200 Then
Err.Raise 5, , "HTML の取得に失敗"
Else
'//ファイルに書き込み
With ADODB
.Type = 1 'adTypeBinary
.Open
.Write http.responseBody
.SaveToFile oFilename , 1 '1:adSaveCreateNotExist, 2:adSaveCreateOverWrite
.Close
End With
End If
End With
getHTML = True
Set http = Nothing
Set ADODB = Nothing
End function
'// IEがビジー状態の間待ちます
Sub waitIE(ie)
Do While ie.Busy = True Or ie.readystate <> 4
WScript.Sleep 100
Loop
WScript.Sleep 1000
End Sub
コメント
調べてみると下記の通り修正して動いたよ。
38行目から下記の様に修正
objIE.Document.getElementById("lst-ib").Value = sKeyword
WScript.Sleep 100
objIE.Document.all("btnK").Click
44行目から下記の様に修正
rURL =objIE.document.getElementByID("ires") _
.getElementsByTagName("ol")(0) _
.getElementsByTagName("cite")(0) _
.innertext
IEに頼ってボタンを押すとかやるからこういう
やや濃いことになっているのだろうか・・・。
もっとDOM操作を勉強しないと。