엑셀 구글 검색어 크롤링 매크로 / 자동화 서식 만들기
라이브 71 회
2021년10월23일
위캔두 Plus
강의 소개
1. 엑셀 VBA 매크로 기초
이번 강의에서는 엑셀 매크로 편집기의 구성 요소와 각 윈도우의 표시 방법 및 사용법에 대해 간략히 알아봅니다.
이후 기본 명령문을 작성하고 변수를 선언하는 방법과 변수를 선언해서 명령문을 작성해야 하는 이유에 대해 알아봅니다.
2. 구글 검색어 크롤링 (10줄 매크로!)
이번 강의에서는 구글 검색어 크롤링에 필요한 GetHTTP 명령문 사용법과 결과로 반환된 데이터를 실제 필요한 문장으로 가공하는 방법을 알아봅니다.
이후 Split 함수를 사용하여 검색 결과를 원하는 단위로 나눈 뒤, 가공하여 최종 결과물을 얻는 방법에 대해 단계별로 살펴봅니다.
3. 구글 검색어 / 블로그 크롤링 서식
이번 강의에서는 작성한 매크로를 활용하여 GetGoogleSearch 라는 사용자함수를 만들고 구글 검색어를 실시간으로 크롤링하는 자동화 서식을 제작합니다.
이후 작성한 명령문을 활용하여 네이버의 블로그 검색 결과를 크롤링하는 엑셀 자동화 서식도 추가로 제작합니다.
보충 자료
1️⃣ 이번 강의에서 사용할 VBA 코드 템플릿
Function GetGoogleSearch()
Dim s As String
Dim v As Variant
Dim i As Variant
End Function
Function GetHttp(URL As String, Optional formText As String, _
Optional isWinHttp As Boolean = False, _
Optional RequestHeader As Variant, _
Optional includeMeta As Boolean = False, _
Optional RequestType As String = "GET") As Object
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ GetHttp 함수
'▶ 웹에서 데이터를 받아옵니다.
'▶ 인수 설명
'_____________URL : 데이터를 스크랩할 웹 페이지 주소입니다.
'_____________formText : Encoding 된 FormText 형식으로 보내야 할 경우, Send String에 쿼리문을 추가합니다.
'_____________isWinHttp : WinHTTP 로 요청할지 여부입니다. Redirect가 필요할 경우 True로 입력하여 WinHttp 요청을 전송합니다.
'_____________RequestHeader : RequestHeader를 배열로 입력합니다. 반드시 짝수(한 쌍씩 이루어진) 개수로 입력되어야 합니다.
'_____________includeMeta : TRUE 일 경우 HTML 문서위로 ResponseText를 강제 입력합니다. Meta값이 포함되어 HTML이 작성되며 innerText를 사용할 수 없습니다. 기본값은 False 입니다.
'_____________RequestType : 요청방식입니다. 기본값은 "GET"입니다.
'▶ 사용 예제
'Dim HtmlResult As Object
'Set htmlResult = GetHttp("https://www.naver.com")
'msgbox htmlResult.body.innerHTML
'###############################################################
Dim oHTMLDoc As Object: Dim objHTTP As Object
Dim HTMLDoc As Object
Dim i As Long: Dim blnAgent As Boolean: blnAgent = False
Dim sUserAgent As String: sUserAgent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Mobile Safari/537.36"
Application.DisplayAlerts = False
If Left(URL, 4) <> "http" Then URL = "http://" & URL
Set oHTMLDoc = CreateObject("HtmlFile")
Set HTMLDoc = CreateObject("HtmlFile")
If isWinHttp = False Then
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Else
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
End If
objHTTP.setTimeouts 3000, 3000, 3000, 3000
objHTTP.Open RequestType, URL, False
If Not IsMissing(RequestHeader) Then
Dim vRequestHeader As Variant
For Each vRequestHeader In RequestHeader
Dim uHeader As Long: Dim Lheader As Long: Dim steps As Long
uHeader = UBound(vRequestHeader): Lheader = LBound(vRequestHeader)
If (uHeader - Lheader) Mod 2 = 0 Then GetHttp = CVErr(xlValue): Exit Function
For i = Lheader To uHeader Step 2
If vRequestHeader(i) = "User-Agent" Then blnAgent = True
objHTTP.setRequestHeader vRequestHeader(i), vRequestHeader(i + 1)
Next
Next
End If
If blnAgent = False Then objHTTP.setRequestHeader "User-Agent", sUserAgent
objHTTP.send formText
If includeMeta = False Then
With oHTMLDoc
.Open
.Write objHTTP.responseText
.Close
End With
Else
oHTMLDoc.body.innerhtml = objHTTP.responseText
End If
Set GetHttp = oHTMLDoc
Set oHTMLDoc = Nothing
Set objHTTP = Nothing
Application.DisplayAlerts = True
End Function
버전 안내
이번 강의는 일부 버전에서 실습이 제한됩니다.
윈도우 : 엑셀 2013 이후 버전에서 사용 가능합니다.
Mac : Mac용 엑셀에서는 WinHTtp 라이브러리가 제공되지 않아 실습 진행이 불가능합니다.
감사합니다.