관련: 지식인
검색어로 구글이미지 검색을 한 뒤에 첫번째 이미지의 썸네일과 원본 주소를 가져오는 것입니다.
이런 경우 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이 조금이라도 변동되면 작동하지 않음을 유의하세요.
서버부하를 조금이라도 줄이기 위해 몇개마다 쉬도록 했습니다.
첨부파일 참고하세요.
'XLS+VBA' 카테고리의 다른 글
엑셀에서 ppt의 특정 페이지를 링크 (0) | 2023.11.21 |
---|---|
juso.go.kr이용 한글주소 ↔ 영어주소 변환 (0) | 2023.06.15 |
영어단어와 뜻 OCR인식 결과 정리하기 (0) | 2023.06.12 |
PPT파일 순서를 확인/정렬해서 합치기 (0) | 2023.02.11 |
JsonBag 클래스를 이용한 Json데이터 파싱 (0) | 2023.01.01 |
연결 끊어진 차트의 엑셀 데이터 복구 (0) | 2022.07.26 |
엑셀 데이터를 JSON형식으로 변환 (2) | 2022.01.13 |
Alt+F11 및 VBE창 금지/ 활성화 (0) | 2022.01.02 |
최근댓글