Получить ссылки на фотографии из поиска Google - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь получить ссылки на картинки из поисковой ссылки через Google, и это моя попытка

Sub Test()
Const sURL As String = "https://www.google.com.eg/search?q=baby&sxsrf=ALeKk01tyfvvxyYjaC0YctjxaY0RlvPnuw:1586804351129&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjB77TtiuboAhUl5uAKHR5KA2wQ_AUoAXoECBQQAw&biw=1280&bih=881"
Dim http As MSXML2.XMLHTTP60, html As MSHTML.HTMLDocument

Set http = New MSXML2.XMLHTTP60
Set html = New MSHTML.HTMLDocument

With http
    .Open "Get", sURL, False
    .send
    html.body.innerHTML = .responseText
End With

Dim post As Object, i As Long

Set post = html.querySelectorAll(".mM5pbd .bRMDJf")

For i = 0 To post.Length - 1
    Debug.Print post.Item(i).innerHTML
Next i

Stop
End Sub

Сначала я получил сообщение. Длина всего 20, хотя я ожидаю около 300, Второй я не могу получить правильную ссылку для картинки, так как кажется, что она зашифрована с помощью base64 или что-то подобное (я не уверен) Как я могу получить реальные ссылки на картинку и получить все ссылки для всех связанных картинок?

Я думаю, что это решается за одну точку

    Set post = html.querySelectorAll("a.VFACy.kGQAp")

For i = 0 To post.Length - 1
    Debug.Print post.Item(i).href
Next i

Но как получить все ссылки вместо 20 ссылок только? ** Ссылки не совсем правильные, например, я получил эту ссылку

https://www.fool.com/taxes/2018/03/27/are-you-having-a-baby-here-are-the-tax-breaks-you.aspx

Хотя правильная ссылка

https://g.foolcdn.com/editorial/images/466737/new-parents-holding-newborn-baby-mom-dad-father-mother.jpg

** Я пытался использовать IE

Sub TestIE()
Dim ie As New InternetExplorer
Dim lastrow As Long
Dim i As Long
Dim j As Long
lastrow = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To lastrow
    ie.Visible = True
    ie.navigate "https://www.google.com.eg/search?q=baby&sxsrf=ALeKk01tyfvvxyYjaC0YctjxaY0RlvPnuw:1586804351129&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjB77TtiuboAhUl5uAKHR5KA2wQ_AUoAXoECBQQAw&biw=1280&bih=881"
    While ie.Busy Or ie.readyState < 4: DoEvents: Wend

    'querySelectorAll("a.VFACy.kGQAp")
    Dim post As Object

    Set post = ie.document.querySelectorAll("a.VFACy.kGQAp")

    For j = 0 To post.Length - 1
        Debug.Print post.Item(i).innerHTML
    Next j
Next
End Sub

Но в результате я получил один и тот же внутренний html для всех

<div class="sMi44c lNHeqe"><div class="WGvvNb" dir="ltr">Baby colic - Wikipedia</div><div class="fxgdke"><span dir="ltr">en.wikipedia.org</span></div> 
</div>

Использует ли QuerySelectorВсе ли другое при работе с IE?

** Еще одна попытка

        Dim post As Object

    Set post = ie.document.querySelectorAll(".bRMDJf img")
    Dim r As Long

    For j = 0 To post.Length - 1
    r = r + 1
        Cells(r, 1).Value = post.Item(i).getAttribute("src")
    Next j

Теперь у меня есть 100, но не ссылки, это шифрование base64 для картинок, более того, я обнаружил, что вывод одинаков для всех картинок. Я мог расшифровать фотографии, но качество было низким ... и я получил только 100 .. Как я могу увеличить количество результатов и получить правильные ссылки?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...