|
IEでキーワードを検索した時に表示される1位から10位までサイト名とURLは取得できるのですが、1位から10位までのdescriptionである説明文を取得方法が見つかりません。 IE.document.body.innerTEXTで取得してもひっかかりとなるパターンがないですし、IE.document.body.innerhtmlだと 下記のようなソースにパターンになっています。これを正規表現でパターンで検出でできればいいのですが、今の私では分かりません。何か良い方法ないでしょうか?
説明文の画像は下記。 https://gyazo.com/e304b640d92044074581051cc1cf79be --------------------- ソース抜粋 <span class="st">文字列<em>文字列</em>文字列<em>文字列</em>文字列<em>文字列</em>文字列<em>エージェント</em>文字列</span> --------------------- uws10位まで検索
IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True
tes ="" goo ="http://www.google.co.jp/search?hl=ja&lr=lang_ja&pws=0&q=" //key = INPUT("キーワードを入力してください")
IE.Navigate(tes+goo+url) // INPUT
BusyWait(IE) Sleep(1) // JavaScriptの完了待ち body = IEGetSrc(IE, "BODY") // BODYのソース取得 body = Copy(body, Pos("<h3 ",body), 999999) // h3タグ以下を取得 body = Copy(body, 1, Pos("background-position", body)) // 不必要部分の削除 cnt = 1 path="C:\Users\aa.xlsm" //データ出力先
Excel = XLOPEN(path) XLSHEET( Excel,url) while True wks= BetweenStr(body,"<h3 ","</h3>", cnt) if wks = EMPTY then break wks = REPLACE(wks,"<em>", "") // 邪魔なタグは潰す wks = REPLACE(wks,"</em>", "") wks = REPLACE(wks,"</a>", "") title=Copy(wks, Pos("<#DBL>",wks,-1)+2, 999) // タイトル url1=BetweenStr(wks, "href=<#DBL>","<#DBL>") // URL
XLSETDATA(Excel, title, "b"+cnt) XLSETDATA(Excel, url1, "c"+cnt) cnt = cnt + 1 wend
Procedure BusyWait(ie) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) Fend ---------------------
|
No.4891 2017/12/25(Mon) 11:26:50
|
☆ Re: キーワードを検索した時に表示される説明文を取得する方法 / 森 |
|
|
HTMLからデータを取得するのは、DOMの勉強をすると良いですよ。
// google_search.uws // ------------------------------ IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True keyword = encode(input("検索キーワード"), CODE_URL) IE.Navigate("http://www.google.co.jp/search?hl=ja&lr=lang_ja&pws=0&q="+keyword) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) sleep(1) g = IE.document.getElementsByClassName("rc") // 個別データ n = g.length - 1 // データ数
// 配列に格納 dim data[n][2] for i = 0 to n COM_ERR_IGN data[i][0] = g.item[i].getElementsByTagName("a").item[0].innerText data[i][1] = g.item[i].getElementsByTagName("a").item[0].href data[i][2] = g.item[i].getElementsByClassName("st").item[0].innerText COM_ERR_RET next
// CSVに出力 f = fopen("data.csv" , F_WRITE8B) fput(f , "Title,URL,Description") for i = 0 to n fput(f , mold(data[i][0]), i + 2 , 1 ) fput(f , mold(data[i][1]), i + 2 , 2 ) fput(f , mold(data[i][2]), i + 2 , 3 ) next fclose(f)
function mold(s) // 改行を削除 s = replace(s, "<#CR>", "") // ダブルクォーテーションをエスケープ s = replace(s, "<#DBL>", "<#DBL><#DBL>") // 前後にダブルクォーテーション result = "<#DBL>" + s + "<#DBL>" Fend
// ------------------------------ 2017/12/26 11:05 検索結果の途中で画像検索結果やショッピング等が入ると以降が取得できなかったため一部修正しました。 getElementsByClassName("g") → getElementsByClassName("rc") TRY - ENDTRY → COM_ERR_IGN - COM_ERR_RET
|
No.4898 2017/12/26(Tue) 10:29:31
|
|
☆ Re: キーワードを検索した時に表示される説明文を取得する方法 / せきしんご |
|
|
森様、回答ありがとうございます。完璧に希望通りの処理です。 このような貴重なソースを提示頂き感謝です。 私ももっと学んでいこうと思います。(DOMの書籍、さっそくアマゾンで買いました)
|
No.4899 2017/12/26(Tue) 12:09:53
|
|