관련: 지식인

 

검색어로 구글이미지 검색을 한 뒤에 첫번째 이미지의 썸네일과 원본 주소를 가져오는 것입니다.

 

이런 경우 PC버전으로 접속하는 것보다 모바일버전으로 접속하는 것이

HTML용량도 적고 Tag도 더 간단합니다.

User-agent 에 Mobile 이라는 문자열을 넣어주시면 됩니다.

HTML은 아래와 같은 구조로 구성되어 있습니다.

편의상 내부의 Table 태그가 img 나 a 태그를 정리하는데 방해가 되어서 주석으로 처리했습니다.

그러면 이제 img 태그 첫번째 것과 a 태그 첫번째 것을 가져오면 되겠습니다.

 

위 내용를 바탕으로 아래와 같이 만들어 보았습니다.

VBA소스:

==> 먼저 Alt-F11 창 메뉴 도구 > 참조에서 Microsoft Html Object Library 만 체크해주세요.

Option Explicit

Dim http As Object  'MSXML2.ServerXMLHTTP60

Sub getGoogleImage()

    Dim html As New MSHTML.HTMLDocument
    Dim URL As String, temp As String
    Dim lastRow As Long, x!, y!, w!, h!
    Dim rng As Range, sht As Worksheet, shp As Shape
    
    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    If http Is Nothing Then Exit Sub
    
    Set sht = ActiveSheet
    lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
    If lastRow < 2 Then MsgBox "A열에 검색어를 입력하세요.": Exit Sub

    '화면 초기화
    sht.Hyperlinks.Delete
    For x = sht.Shapes.Count To 1 Step -1
        sht.Shapes(x).Delete
    Next x
    
    'A열 순환
    For Each rng In sht.Range("A2:A" & lastRow)
        rng.Offset(, 1).Resize(, 3).Clear
        rng.RowHeight = 50
        URL = "https://www.google.com/search?q=" & rng & "&tbm=isch"
        
        '//Table 태그 무력화
        temp = getHTML(URL)
        temp = Replace(temp, "<table", "<!--table")
        temp = Replace(temp, "/table>", "table-->")
        'Debug.Print temp
        html.body.innerHTML = temp
        
        '썸네일
        temp = html.getElementsByTagName("img")(0).src
        With rng.Offset(, 1)
            h = .Height
            w = h
            x = .Left + .Width / 2 - w / 2
            y = .Top
            Set shp = sht.Shapes.AddPicture(temp, msoFalse, msoTrue, x, y, w, h)
            shp.Name = rng
            shp.AlternativeText = temp
        End With
        
        '썸네일 주소
        rng.Offset(, 2) = temp
        sht.Hyperlinks.Add rng.Offset(, 2), temp
        
        '원본 URL
        temp = html.getElementsByTagName("a")(0).href
        'about:/imgres?imgurl=https://gradium.co.kr/wp-content/uploads/coffee-3-1.jpg&imgrefurl=https://gradium.co.kr/coffee-benefits/&h=853&w=1280&tbnid=AxxGoRKBnzrJBM&q=%EC%BB%A4%ED%94%BC&tbnh=183&tbnw=275&iact=rc&usg=AI4_-kRtWIQOXotKfF2Nt7VHeNjf9AHSQw&vet=1&docid=lK-ctQQW6sjnxM&itg=1&tbm=isch&sa=X&ved=2ahUKEwis-dHjzfP8AhXLklYBHT3QAlAQrQN6BAgHEAE
        temp = Mid(temp, InStr(temp, "=") + 1)
        temp = Left(temp, InStr(temp, "&") - 1)
        rng.Offset(, 3) = temp
        sht.Hyperlinks.Add rng.Offset(, 3), temp
        
        '5개 마다 1초 휴식
        If (rng.Row - 1) Mod 5 = 0 Then Application.Wait Now + TimeValue("00:00:01")
    Next rng
    'sht.Cells.Columns.AutoFit
    
    Set http = Nothing
    Set html = Nothing
End Sub

Function getHTML(sUrl As String) As String
      
    With http
        .Open "get", sUrl, False
        .setRequestHeader "User-agent", "Mozilla/5.0 Mobile"
        .send
        getHTML = .responseText
    End With
      
End Function

 

 

실행화면:

나중에 구글 이미지 검색사이트 HTML이 조금이라도 변동되면 작동하지 않음을 유의하세요.

서버부하를 조금이라도 줄이기 위해 몇개마다 쉬도록 했습니다.

첨부파일 참고하세요.

 

 

getGoogleImage1.xlsm
0.02MB