Для исследовательского проекта в университете я планирую выполнить большее количество запросов данных с общим значением c. 3000 различных электронных таблиц, каждая из которых включает около 800-1000 уникальных запросов данных.
Цель кода - получить количество результатов Новостей Google для определенных поисковых терминов за определенные промежутки времени, например, результаты для "Элон Маск" в период с 01.01.2015 по 12.12.2015.
Я до сих пор создал код, который относительно хорошо работает с однопоточным подходом, но, учитывая большое количество запросов данных, потребуется несколько недель для завершения 3000 электронных таблиц (Google иногда блокирует запросы, учитывая явный количество поисковых запросов, но это, как правило, управляемо).
С другой стороны, я читал, что в VBA нет «нативной» опции, позволяющей сэкономить время при многопоточности, хотя существует несколько предложений, позволяющих обойти это отсутствие реальной многопоточности. Ни один из них, однако, действительно не работал для моего случая до сих пор.
Есть ли практический вариант, чтобы приведенный ниже код отправлял несколько запросов Google одновременно? Это позволило бы сбор данных в гораздо более короткий промежуток времени. Как уже упоминалось, я уже прошел через ряд сложных «готовых» многопоточных решений, из которых ни одно на самом деле не работало.
Option Explicit
Sub TermCheck()
Dim url As String, lastRow As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 62 To lastRow
url = "https://www.google.com/search?q=" & Cells(i, 3) & "&source=lnt&tbs=cdr%3A1%2Ccd_min%3A" & Cells(i, 4) & "%2Ccd_max%3A" & Cells(i, 5) & "&tbm=nws"
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHTTP.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHTTP.responseText
Set objResultDiv = html.getElementById("rso")
Set var1 = html.getElementById("resultStats")
If Not var1 Is Nothing Then
Cells(i, 6).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
End Sub