Как получить первую ссылку на результат поиска Google, используя VBA? - PullRequest
0 голосов
/ 01 ноября 2018

В своих повседневных задачах мне в настоящее время приходится искать большое количество продуктов и собирать информацию об этих продуктах. Поэтому моя идея состоит в том, чтобы искать продукт в 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, либо возвращает ссылку для меня. Моей идеей было бы тогда почерпнуть данные из раздела названия продукта с этой страницы! все еще очень ранние стадии все же.

Я только начинающий, поэтому любая помощь будет высоко оценена! Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вот как бы я это сделал. Поместите некоторые критерии поиска в ячейку A2, опустившись в столбце A так далеко, как вы хотите. Затем запустите код ниже. Результаты попадут в соседние ячейки в столбце B

enter image description here

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
0 голосов
/ 01 ноября 2018

Ваш пробег, вероятно, будет зависеть от этого, но для того, что вы предоставили, вы можете использовать комбинацию селекторов CSS для нацеливания на первую ссылку с помощью стиля страницы.

Я использую #search div.r [href*=http], но вы можете упростить до #search .r a. Мне интересно знать, что в href есть http.

# - селектор идентификатора, пробел " " - селектор потомка (выбирается дочерний элемент предыдущего элемента, а [] - селектор атрибута. "." - селектор класса, т.е. элемент по имени класса.

Я ищу первый элемент с атрибутом href, содержащим http в своем значении, который имеет родительский элемент div с именем класса r, чей родитель имеет идентификатор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...