如何谷歌图像搜索excel单元格内容并返回网址?

时间:2014-07-04 16:46:33

标签: excel vba excel-vba

是否可以编写一个宏或vba来搜索行A中的单元格内容并返回图像的URL?我已经能够返回过去的第一个结果或第一个搜索结果,但我无法弄清楚如何制作一个会返回相关图像,如:

http://www.gamexchange.co.uk/images/pictures/products/ps3/littlebigplanet-3-ps3-(product-photography).jpg?v=b13dfc3644d28cd2cff7d5729a35fc5e

任何帮助都会受到赞赏,因为我认为我现在已经用尽了搜索功能。

谢谢。

以下是我使用过的代码无效的代码。

 Sub XMLHTTP()

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

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.co.in/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 objH3 = objResultDiv.getelementsbytagname("H3")(0)
    Set link = objH3.getelementsbytagname("a")(0)


    str_text = Replace(link.innerHTML, "<EM>", "")
    str_text = Replace(str_text, "</EM>", "")

    Cells(i, 2) = str_text
    Cells(i, 3) = link.href
    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

1 个答案:

答案 0 :(得分:0)

问题在于,每次搜索都会带您进入另一个域,其中完全不同的 HTML结构。

没有可靠的方法来执行此操作并引入正确的图片,因为您无法事先知道返回的HTML的结构,您需要为图像解析...当然,您可以尝试返回每个页面上的第一个图像,但由于这些页面可能包含与您的搜索无关的许多图像,因此不是会变得非常可靠。

一种替代方法是执行您当前正在执行的操作,以获取电子表格中的str_textlink.href到B和C列,然后运行第二 XMLHTTP请求到以下结构的URL:

url = "https://www.google.co.in/search?q=" & Cells(i, 1) & "&source=lnms&tbm=isch&sa=X" & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)

这将返回Google图片搜索。再次,这将不是完美的,因为应用程序无法知道哪个是最好的&#34;要返回的图片,但您可以更可靠地返回第一个图片,因为这些结果更可能与您的搜索字词相关。