- ベストアンサー
VBA IE操作 スクレイピングについての質問
- VBAを使用して、プロ野球のサイトから情報をスクレイピングするコードを作成したい。具体的には、球団ごとの選手の画像を取得したい。
- IEを使用してサイトにアクセスし、球団のページに移動して選手のページにアクセスして画像を取得する。
- コードの一部は正常に動作しているが、選手のページから戻る処理でエラーが発生している。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ >objIE.GoBack '前のページへ戻る '* ここでエラーになります これはobj.Click 'ページジャンプでリンク先に飛んだ場合はそうなるみたいですね。 また、私の環境ではobj.Click での処理は、 動作が不安定になるのでまったく違う方法を書きます。 Sub Graph_Down2() Dim re As Object 'VBScript.RegExp Dim mc As Object 'RegExp.Match Dim mcmc As Object 'RegExp.Match Dim url As String 'URLアドレス Dim ret As String 'XMLHTTP.responsetext Dim objIE, obj Dim i As Long, j As Long, k As Long Sheets("Sheet1").Cells.ClearContents Set re = CreateObject("VBScript.RegExp") re.Global = True Set objIE = CreateObject("InternetExplorer.Application") 'IEを開く objIE.Visible = True objIE.Navigate "http://bis.npb.or.jp/players/" Do While objIE.ReadyState <> 4 'サイトが開くまで待機 Do While objIE.Busy = True Loop Loop ret = objIE.Document.body.innerHTML ' <a href="/teams/rst_d.html"> 球団のURL re.Pattern = "<A href=""/(teams/rst_[dsgtc]b?\.html)"">" Set mc = re.Execute(ret) For j = 0 To mc.Count - 1 'Sheets("Sheet1")のA列にURLを書き出す。 Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1) = _ "http://bis.npb.or.jp/" & mc(j).SubMatches(0) objIE.Navigate "http://bis.npb.or.jp/" & mc(j).SubMatches(0) Do While objIE.ReadyState <> 4 'サイトが開くまで待機 Do While objIE.Busy = True Loop Loop ret = objIE.Document.body.innerHTML '<A href="/players/91595118.html"> 選手のURL re.Pattern = "<A href=""/(players/\d+\.html)"">" Set mcmc = re.Execute(ret) For k = 0 To mcmc.Count - 1 'Sheets("Sheet1")のC列にURLを書き出す。 Sheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Offset(1) = _ "http://bis.npb.or.jp/" & mcmc(k).SubMatches(0) Next k Next j Set obj = Nothing objIE.Quit Set objIE = Nothing End Sub Sub 画像を取得() Dim objIE, obj Dim i As Long, j As Long, k As Long Set objIE = CreateObject("InternetExplorer.Application") 'IEを開く objIE.Visible = True 'For i = 2 To Sheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row For i = 2 To 5 'テストのため、取りあえず4回まわす。 objIE.Navigate Sheets("Sheet1").Cells(i, 3).Value Do While objIE.ReadyState <> 4 'サイトが開くまで待機 Do While objIE.Busy = True Loop Loop MsgBox "ここに画像を取得する処理コードを書く" Next i objIE.Quit Set objIE = Nothing End Sub また、画像の取得は私の手に余りますので、 もう一度、質問をしてください。
お礼
ありがとうございます。 しっかりとURLが取得できました。あとは画像取得のコードを考えていきたいと思います。 正規表現は苦手で、ずっと手を付けないままでしたが、 これを機に勉強したいと思います。 ありがとうございました。 また再度質問するかもしれませんが、 その時は宜しくお願いいたします。