【发布时间】:2018-11-18 19:04:37
【问题描述】:
对于 Excel 中的 VBA 应用程序,我试图在缩小搜索范围时包含 Google 提供的“自定义时间范围”功能。到目前为止,我正在使用以下代码(见下文),它允许将给定搜索词的“resultStats”从 Google 导入 Excel,但缺少时间范围选项。
在这种特定情况下,我需要确定结果/文章的数量,例如2015 年 1 月 1 日至 2015 年 12 月 31 日期间为“埃隆·马斯克”拍摄。下面的代码是否有任何可行的补充?这也可以应用于 Google 新闻标签而不是常规的 Google 搜索结果吗?
非常感谢!
Sub Gethits()
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 = 2 To lastRow
url = "https://www.google.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
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")
Cells(i, 2).Value = var1.innerText
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)
结束子
【问题讨论】:
标签: html excel vba web-scraping