IE操作メモ③ - Amazonから検索結果一覧取得!
IE操作時の開発メモ
コチラの記事は、ブログ管理人の開発メモです。
開発する際や、再度WEBから検索する手間を省くため、ソース + 一言コメントで記事を書いています。
Amazonからのデータ一覧取得方法
' ' 機能 :URL、開始ページ、終了ページを引数に、製品のリンク一覧を取得する ' ' 引数 :strURL : カテゴリごとのもととなるURL ' :intStartPage : 開始ページ ' :intEndPage : 終了ページ ' 返り値 : ' ' 備考 :1 ~ 400ページ(最大表示ページ数)まで遷移してリストに格納 ' Function getSelectCategoryProductsListALL(strURL As String, intStartPage As Integer, intEndPage As Integer) As String() On Error GoTo getSelectCategoryProductsListALL_Err Debug.Print "処理開始:" & Time '実行中を表示 Range("B6").Value = "実行中です、しばらくお待ちください (1/5)" '******************IEを開く****************** Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = False 'True:IEを表示 , False:IEを非表示 '******************指定したページ数分(1 ~ 400)が最大URLデータ取得処理をループ****************** Dim strlURL_1() As String 'URL格納用 ReDim strlURL_1(0) Dim pageNo As Integer Dim listNo As Integer: listNo = 0 '配列の要素数更新用 Dim el As IHTMLElement 'IHTMLエレメントオブジェクトを準備 Dim URL_el As IHTMLElementCollection 'liのHTMLエレメントコレクションを準備 Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備 For pageNo = intStartPage To intEndPage 'ページ数をしてURLを開く objIE.navigate strURL & "&page=" & CStr(pageNo) 'ページのデータを取得するために、ページが表示されるまで待つ Call SysContentCls.DisplayWait(objIE) 'objIEで読み込まれているHTMLドキュメントをセット Set htmlDoc = objIE.document '商品タイトルのリンク要素を取得 Set URL_el = htmlDoc.getElementsByClassName("a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal") 'リンクの数分処理実行 For Each el In URL_el If listNo = 0 Then strlURL_1(listNo) = el.href Else '要素数を更新 ReDim Preserve strlURL_1(listNo) 'Preserveは今まで格納した値を残したままにするために記述 strlURL_1(listNo) = el.href End If Debug.Print el.href '要素数を更新 listNo = listNo + 1 Next el Next pageNo 'IEを閉じる objIE.Quit '戻り値にURLリストを入れる getSelectCategoryProductsListALL = strlURL_1 Debug.Print "全てのリンク取得OK:" & Time Exit Function getSelectCategoryProductsListALL_Err: MsgBox "エラー発生" End Function
ページ数文のloop処理
開くURLに「&page=ページ数」を指定しています
'ページ数をしてURLを開く objIE.navigate strURL & "&page=" & CStr(pageNo)
重要なところはココ!
'商品タイトルのリンク要素を取得 Set URL_el = htmlDoc.getElementsByClassName("a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal")
ソースの美しさはさておき、これで取得できます!
また、このクラス名はGoogleChromeで「Ctrl + Shift + I」を押して
「デベロッパーツール」を開き、右上のエレメントを選択してHtmlを見れるボタンを押してから、取得したい項目を左側で選択すれば、
その要素のIDやらclass等が簡単に確認できます!
※Excelでやる場合に限らず、WEBスクレイピングやるならこの確認方法は必須!!
エレメントを選択ボタン
商品タイトル選択後のイメージ
idで指定する場合、classで指定する場合、Tagで指定する場合それぞれ取得方法が違うため、
適宜変えていく必要がある!
IEから各要素(id , class , tag)を取得する方法は以下にまとめてます
ではではーノシ