VBAでスクレイピングプログラムを作成したのですが、
100サイトくらいスクレイピングを行うとエラーが発生します。
50サイトづつに分けると問題なくプログラムが最後まで動きます。
原因、改善方法がわかる方アドバイス頂ければ有り難いです。
VBA
1Private Function a(btAry As String) 2 3 Application.ScreenUpdating = False 4 5 Dim i As Long 6 Dim urlLen As Long 7 Dim urlStr() As String 8 Dim tAry() As String 9 10 urlStr() = Split(btAry, ",") 11 urlLen = UBound(urlStr) 12 13 14 ReDim tAry(urlLen, 1) As String 15 16 For i = 0 To urlLen - 1 17 tAry(i, 0) = urlStr(i) 18 sleep (1) 19 Next 20 21 Dim ie As InternetExplorer 22 Dim htdoc As HTMLDocument 23 Dim tagName As HTMLElementCollection 24 25 Set ie = CreateObject("InternetExplorer.Application") 26 27 ie.Visible = True 28 ie.Top = True 29 ie.Left = True 30 ie.Width = 500 31 ie.Height = 500 32 33 For i = 0 To urlLen - 1 34 Debug.Print i & " / " & urlLen - 1 35 ie.Navigate tAry(i, 0) 36 37 Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE 38 DoEvents 39 Loop 40 41 Set htdoc = ie.Docum 42 ent 43 44 45 If InStr(htdoc.URL, "") > 0 Then 46 For Each tagName In htdoc.getElementsByClassName("") 47 If InStr(tagName.outerText, "") > 0 Then 48 tAry(i, 1) = "×" 49 Exit For 50 End If 51 Next 52 End If 53 54 55 Set htdoc = Nothing 56 Set tagName = Nothing 57 sleep 1 58 Next 59 60 ie.Quit 61 62 Set ie = Nothing 63 Set htdoc = Nothing 64 65 Dim num As Long 66 Dim ws As Worksheet 67 Set ws = ActiveSheet 68 num = ws.Cells(1, 1).CurrentRegion.Rows.Count - 1 69 70 For i = 0 To num - 2 71 If ws.Cells(i + 2, 1).value = tAry(i, 0) Then 72 ws.Cells(i + 2, 3).value = tAry(i, 1) 73 End If 74 sleep 1 75 Next 76 77 Set ws = Nothing 78 79End Function
何回か試して見ると別のエラーもでました。
↓tagNameはこちらで定義しています。
Dim tagName As HTMLElementCollection
【依頼】保護モードを確認してみてください。→エラーの発生した時点で、IEには問題となったWebページが表示されていると思いますが、そのページ上で、右クリック→プロパティと操作。→「ゾーン」の行はどのような値になっていますか? 保護モード=「有効」ならOKですが、「無効」だと問題ありかもです。
保護モードは「有効」になっていました。
確認ありがとうございました。"有効"ならば問題なさそうですね。 ※私の経験ですが、 以前、Navigationまではできるのにその後の操作ができない。という状況になり、 そのときは、保護モードとIEオブジェクト InternetExplorer.Application or InternetExplorer.ApplicationMedium の組み合わせが原因でしたので。

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