やりたい事
**【URL】【画像】【商品名】【発売日】【値段】**を抜き出してExcel2016に入力する。
下記対象サイト
HTML
1▾ 2 ▾<div id="Main"> 3 ▾<a href="URL1" class"s d a"> 4 ▾<div class="img"> 5 <img src="https://...jpg?" Srcset="https://...jpg? x1, https://...jpg? x2"> 6 </div> 7 ▾<div class="one"> 8 ▾<div class="two"> 9 <span class="title">商品名</span> 10 </div> 11 <div class="three">発売日</div> 12 ▶<div class=""></div> 13 ▾<div class="four"> 14 ▾<div class="five"> 15 ▾<span style="color: #888888;"> 16 <strike>¥1,520</strike> 17 </span> 18 <br> 19 "¥1,140 " 20 </div> 21 </div> 22 </div> 23 <div style="clear: left;"></div> 24 </a> 25 ▶<a href="URL2" class"s d a">…</a> 26 ▶<a href="URL3" class"s d a">…</a> 27 ▶<a href="URL4" class"s d a">…</a> 28 </div> 29▶
※必要でないような部分は記述していません。classはそのまま表示するわけにもいきませんので英数字を入れています。出来ない部分は無理に出力も必要ありません。
(<a href>内のclassは一部商品を除き同一でした。)
もし上記だけでは情報不足という事であれば、その前後も追記致します。
<a>タグの中に欲しい情報が全て収まっており、ブラウザ上は横並びで一行になっています。
<a>タグ1つが1行で、その下URL2,3,4…と下に続いています。その全てをページを変えて抽出が目標となっております。
丸投げになっている事は重々理解しています。しかしこの部分だけ丸一日様々なサイトを閲覧し、試してみたもののまったく成果が無く、やむなくこちらのサイトを利用した次第です。
Linksでページ上全てのURLを抜き出す事は出来たのですが、必要な部分がその1/3程で全く使いこなせませんでした。
出来ている部分
InputBox → ワード入力 → IE起動 → ログインページ → ID・pass入力 → 検索エンジンのあるURLに移動 → 検索エンジンにワード入力 → 検索ページに移動 + 次のページをクリック
Excel
1Sub Wait(ByVal objIE As InternetExplorer) 2' Dim Lc As Integer 3 Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE 4 DoEvents 5 Loop 6 7' IE表示待ち(たまに抜けない場合もあるので1万回ループで強制抜け) 8' Lc = 0 9' Do While objIE.Busy = True Or objIE.readyState <> 4 Or Lc > 10000 10' DoEvents 11' Lc = Lc + 1 12' Loop 13 14End Sub 15 16Sub ログイン() '「ツール」「参照設定」「Microsoft HTML Object Library」「Microsoft Internet Controls」忘れずに 17 18 Dim keyword As String 19 keyword = InputBox("検索したいワードを入力してください。") 20 21 Dim objIE As InternetExplorer '操作するIEを入れる「箱」つまりオブジェクト変数を準備 22 Set objIE = New InternetExplorer '箱に新しいIEをセット 23 24 objIE.Visible = True 'IEを画面に表示する 25 objIE.navigate "https://s.com/login/home/?goto=" '管理画面ページのURLを指定 26 Wait objIE 27 28 Dim htmlDoc As HTMLDocument 'HTMLDocumentというHTMLドキュメントを表すオブジェクト 29 Set htmlDoc = objIE.document 'InternetExplorerオブジェクトのDocumentプロパティ 30 31 With htmlDoc 32 .getElementById("AccountName").Value = "ЖЖЖ" 'ユーザー名を指定 33 .getElementById("Password").Value = "ЖЖЖ" 'パスワードを指定 34 .getElementById("Login").Click 35 End With 36 Wait objIE 37 38 objIE.navigate "https://s.com/search/" '検索エンジンのあるページへのURLを指定 39 Wait objIE 40 41 With htmlDoc 42 .getElementById("store_nav_search").Value = keyword 43 .getElementById("store_search_link").Click 44 End With 45 Wait objIE 46 47' Dim page As Long 48' For page = 1 To 5 49' Wait objIE 50' Set htmlDoc = objIE.document 51 52 Dim anchor As HTMLAnchorElement 53 With htmlDoc 54 .getElementById("search_resultsRows").Links 55 Debug.Print anchor.href 56 End With 57 58' With htmlDoc 59' .getElementsByClassName("pagebtn")(0).Click 60' End With 61' Wait objIE 62 63' Next page 64 65End Sub
※サイトを参考に「これで動いた」程度の理解状況です。使用したものを完璧に理解しているわけでは御座いません。
コメント部分の半端なプログラムは、後々使うであろうものを残しています。
anchor部分は現状試しているもののエラーで動かない部分です。
出来れば切に希望する教えて頂きたい事
スクレイピングの抽出の流れは外堀から考えていく事だと思うのですが、その方法が全く理解出来ていません。
こちらを作成後、今度はPythonでスクレイピングを行う予定ですので、考え方を理解したいと考えております。(IEでの操作で対象サイトのドロップダウンするものをクリックしても反映されない等あり、Pythonでの習得も考えております。)
【getElement】【getElements】等、単体かコレクションかでスタートからやり方が違っていると思うのですが、各々の進め方を理解できるように教えて頂ければ幸いです。
単体とコレクションがあるという事だけしか理解出来ていません。使い方がサイトのHTMLの条件次第ということもHTMLを使用したことがあるため理解しています。これ使えそう!と思ってもそれを使うための技術が無く、根本的にそこからでは出来ないのか出来るのかがわからないのも悩みの種になっています。
又、ログインが必要なサイトでログインが必要な事は理解できます。ログインするプログラムを作る際、ログインをしているかどうかの確認が必須だと考えております。調べてみたところcookieを利用する等の情報はあるものの詳細が御座いません。下手にログインも含めたプログラムは組まないほうが良いのでしょうか。

回答1件
あなたの回答
tips
プレビュー