从Google将VBA数据导入Excel:自定义时间范围

时间:2018-11-18 19:04:37

标签: html excel vba web-scraping

对于Excel中的VBA应用程序,我试图在缩小搜索范围时包括Google提供的“自定义时间范围”功能。到目前为止,我正在使用以下代码(请参见下面的代码),该代码允许将来自Google的给定搜索词的“ resultStats”导入Excel,但是缺少时间范围选项。

在这种情况下,我需要确定结果/文章的数量,例如在2015年1月1日至2015年12月31日之间购买“伊隆麝香”。下面的代码是否有任何可行的补充?还能将其应用于Google新闻标签,而不是常规的Google搜索结果吗?

非常感谢!

* @param unit The desired dimension unit.
 * @param size The desired size in the given units.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
public void setTextSize(int unit, float size)

结束子

2 个答案:

答案 0 :(得分:1)

似乎您需要URL编码,因此在包含cd_minnews参数时,如下所示的字符串可以工作。您可以使用参数tbm=nws指定Application.Encodeurl()

正如@chillin所提到的,您可以使用Option Explicit Public Sub GetResultCount() Dim sResponse As String, html As HTMLDocument With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://www.google.co.uk/search?q=elon+musk&safe=strict&biw=1163&bih=571&source=lnt&tbs=cdr%3A1%2Ccd_min%3A1%2F1%2F2015%2Ccd_max%3A12%2F31%2F2015&tbm=nws", False .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" .send sResponse = StrConv(.responseBody, vbUnicode) End With Set html = New HTMLDocument With html .body.innerHTML = sResponse Debug.Print .querySelector("#resultStats").innerText End With End Sub 实现参数编码。

我也尝试了API方法,但收效有限。尽管dataRange过滤器可以在sort参数中传递,但是您需要注册API密钥,设置自定义搜索引擎并设置您的要求。每个查询最多10个结果;免费通话有API通话限制。您可以指定一个起始数字以获取10个块。您还可以通过运行Google APIs explorer - custom search来查看URL编码是什么。我发现它只返回了2个结果,显然不在预期数目范围内。

{{1}}

答案 1 :(得分:0)

感谢您的反馈。现在,我对URL行进行了如下修改(包括Excel ENCODEURL函数,该函数直接应用于Excel电子表格的输入单元格),并且可以正常运行:

url = "https://www.google.com/search?q=" & Cells(i, 1) & "&source=lnt&tbs=cdr%3A1%2Ccd_min%3A" & Cells(i, 2) & "%2Ccd_max%3A" & Cells(i, 3) & "&tbm=nws"