【问题标题】:How to get the first search result link of a google search using VBA?如何使用 VBA 获取谷歌搜索的第一个搜索结果链接?
【发布时间】:2019-04-05 14:51:12
【问题描述】:

在我的日常任务中,我目前必须搜索大量产品并收集有关这些产品的信息。所以我的想法是在 google 上搜索产品,并通过从产品标题部分中提取数据来从第一个搜索结果中获取信息,然后对许多产品进行循环。

到目前为止,这是我的代码:

Sub SkuAutomation()

Dim ie As Object


'Navigates to google
 Set ie = CreateObject("InternetExplorer.application")
 ie.Visible = True
 ie.Navigate "https://google.co.uk/search?q=" & Worksheets("sheet1").Cell(9, 4).Value & " " & Worksheets("sheet1").Cells(9, 2)


'Waits for page to load before next action

Do While ie.ReadyState <> READYSTATE_COMPLETE

Loop

End Sub

我只想添加一段代码,它要么点击谷歌返回的第一个链接,要么为我返回链接。然后我的想法是从该页面的产品标题部分刮取数据!尽管如此,仍然处于非常早期的阶段。

我只是一个初学者,所以任何类型的帮助都将不胜感激!提前谢谢了。

【问题讨论】:

  • 请举例搜索词?并且 google 搜索结果将不仅仅是产品,您可以以一致的方式很好地抓取各个页面(尽管您可以删除初始结果列表)。这很可能是结果的混乱。
  • 感谢您的回复.. 所以我将搜索的方式将确保结果是产品,例如我将按产品代码和零售商搜索,因此示例搜索词为“Currys 241825 "
  • 您只想要第一个产品链接?
  • 非常感谢您的帮助。所以我正处于我想要做的事情的早期阶段,但在某些情况下,我得到一个包含产品代码的文件,我发现如果我与相应的零售商搜索产品代码,大约 90% 的时间是第一个链接是我从确切的零售商网站上寻找的确切产品。所以我的想法是自动搜索产品,点击第一个链接并抓取产品标题部分(我从一定数量的零售商那里获得产品,所以将来自同一个站点)。 Idk 如果这是可能的,但真的想自动化这个过程。

标签: excel vba web-scraping automation


【解决方案1】:

您的里程可能会有所不同,但对于您提供的内容,您可以使用 CSS 选择器组合通过页面样式定位第一个链接。

我使用#search div.r [href*=http],但您可以简化为#search .r a。我很想知道href 中有一个http

# 是 id 选择器,空格 " " 是后代选择器(选择前面元素的子元素,[] 是属性选择器。"." 是类选择器,即选择一个按类名的元素。

我正在寻找具有href 属性的第一个元素,其值包含http,其父元素div 元素的类名为r,其父元素的id 为search

Option Explicit
Public Sub GetLink()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .navigate "https://google.co.uk/search?q=Currys+241825"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Debug.Print .document.querySelector("#search div.r [href*=http]").href

        .Quit
    End With

End Sub

【讨论】:

  • 太棒了!非常感谢您的帮助,非常感谢。
  • 用一些产品试一试,然后告诉我。
【解决方案2】:

这就是我的做法。在单元格 A2 中放置一些搜索条件,在 ColumnA 中尽可能地向下。然后运行下面的代码。结果将进入ColumnB中的相邻单元格

girafe
rhino
starbucks


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)
End Sub

【讨论】:

  • 太棒了。如果确实对您有所帮助,您能否将此答案标记为有帮助?
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 2013-08-31
  • 2022-01-18
  • 1970-01-01
  • 2021-08-23
  • 2015-12-29
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多