블로그 키워드 발행량 분석, 엑셀로 자동화 하는 방법
네트워크 분석으로 특정 키워드의 블로그 발행량을 조회하는 방법 및 실시간 분석을 위한 VBA 함수 제작까지 단계별로 알아봅니다.
이 강의에서는 네이버 검색 결과의 네트워크 분석으로 블로그 발행량 조회 URL을 추출하고, 엑셀에서 바로 호출할 수 있도록 NaverPostCount 사용자 지정 함수를 직접 제작하는 방법을 다룹니다. URL 쿼리문 분석부터 GetHTTP·Splitter 보조 함수 작성, 결과 가공까지 단계별로 정리해, 네트워크 분석을 활용한 VBA 자동화의 전체 흐름을 익힐 수 있습니다.
실습 가이드
⭐ 중요 알림 ⭐
2024년 8월 20일 이후,
네이버에서 블로그 게시글의 주/월별 발행량 조회 URL 서비스를 중단하였습니다. 😢
이에 따라 본 강의에서 안내해 드린 방식 그대로의 실습은 더 이상 진행하기 어렵지만,
강의에서 다루는 네트워크 분석 원리와 VBA 함수 제작 흐름은 여전히 유용하니 학습용으로 참고해 주세요. 😉
대체 URL을 활용해 블로그 발행량을 조회하는 방법은
별도의 멤버십 특강으로 곧 제공해 드릴 예정입니다.
감사합니다. 🙇♂️
라이브 강의 전체영상도 함께 확인해보세요!
위캔두 회원이 되시면 매주 오빠두엑셀에서 진행되는 라이브 강의 풀영상을 모두 확인하실 수 있습니다.
NaverPostCount 함수 요약
NaverPostCount 함수 구문
= NaverPostCount ( 키워드, [기간] )
'완성 코드와 사용 방법은 아래 목차에 단계별로 정리해 두었습니다.
'본 함수는 Windows 환경에서만 사용 가능합니다. (Mac 사용 불가)
'완성 코드와 사용 방법은 아래 목차에 단계별로 정리해 두었습니다.
'본 함수는 Windows 환경에서만 사용 가능합니다. (Mac 사용 불가)
NaverPostCount 인수 설명
| 인수 | 설명 |
| 키워드 | 블로그에 발행된 문서 수를 조회할 키워드를 입력합니다. |
| 기간 [선택인수] |
발행된 문서 수를 조회할 기간을 지정합니다. 기본값은 1개월(=1m)입니다.
오빠두Tip : from시작일to종료일 형식으로 입력하면 특정 기간의 발행량을 조회할 수 있습니다. 특정 기간 발행량 조회 방법은 라이브 전체영상에서 확인해 보세요. |
Dim URL As String Dim Keyword As String: Dim Period As String Dim HTMLDoc As HTMLDocument Dim strResult As String Keyword = "엑셀" Period = "1m" '1h:1시간, 1w:1주, 1m:1달, 1y:1년, from20200101to20201231:기간지정.. URL = "https://s.search.naver.com/p/blog/search.naver?where=blog&api_type=1&query=" & Keyword & "&dup_remove=1&nso=so:r,p:" & Period & ",a:all&nx_search_query=" & Keyword
본 함수가 사용하는 두 보조 함수의 자세한 사용법은 아래 관련 강의를 참고해 주세요.
Private 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 Private Function Splitter(v As Variant, Cutter As String, Optional Trimmer As String) '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ Splitter 함수 '▶ Cutter ~ Timmer 사이의 문자를 추출합니다. (Timmer가 빈칸일 경우 Cutter 이후 문자열을 추출합니다.) '▶ 인수 설명 '_____________v : 문자열입니다. '_________Cutter : 문자열 절삭을 시작할 텍스트입니다. '_________Trimmer : 문자열 절삭을 종료할 텍스트입니다. (선택인수) '▶ 사용 예제 'Dim s As String 's = "{sa;b132@drama#weekend;aabbcc" 's = Splitter(s, "@", "#") 'msgbox s '--> "drama"를 반환합니다. '############################################################### Dim vaArr As Variant On Error GoTo EH: vaArr = Split(v, Cutter)(1) If Not IsMissing(Trimmer) Then vaArr = Split(vaArr, Trimmer)(0) Splitter = vaArr Exit Function EH: Splitter = "" End Function
NaverPostCount 함수의 완성 코드입니다. 위에서 안내해 드린 GetHTTP, Splitter 보조 함수와 함께 아래 완성 코드를 VBA 모듈에 붙여넣기하면 바로 사용할 수 있습니다.
오빠두Tip : VBA 입문자라면 아래에 정리해 드린 함수 사용법을 참고하여 단계별로 명령문을 직접 추가해 보세요.
Function NaverPostCount(Keyword, Optional Period = "1m") Dim URL As String Dim HTMLDoc As Object Dim strResult As String '1h:1시간, 1w:1주, 1m:1달, 1y:1년, from20200101to20201231:기간지정.. URL = "https://s.search.naver.com/p/blog/search.naver?where=blog&api_type=1&query=" & Keyword & "&dup_remove=1&nso=so:r,p:" & Period & ",a:all&nx_search_query=" & Keyword Set HTMLDoc = GetHttp(URL) strResult = HTMLDoc.body.innerHTML strResult = Splitter(strResult, """total"":""", """,""") NaverPostCount = CLng(strResult) End Function
VBA 입문자를 위한 NaverPostCount 함수 사용법
- 매크로 편집기 실행하기 : 엑셀 상단 [개발도구] - [Visual Basic] 버튼을 클릭하거나 단축키 ALT + F11 키를 눌러 매크로 편집기를 실행합니다.
오빠두Tip : 개발도구 탭이 보이지 않는 경우, 리본 메뉴를 우클릭한 뒤 '리본 메뉴 사용자 지정'으로 이동하여 개발도구를 활성화합니다. - 매크로 편집기가 실행되면 상단 [삽입] 탭 - [모듈]을 클릭하여 새로운 모듈을 추가합니다.

- VBA 함수 추가하기 : 추가된 모듈을 더블클릭하여 코드 창으로 이동한 뒤, 위에 안내해 드린 NaverPostCount 완성 코드를 복사하여 붙여넣기합니다.

- 붙여넣기한 코드 아래로 보조 함수도 이어서 복사·붙여넣기합니다.

- 함수 동작 확인하기 : 엑셀 시트로 돌아온 뒤, 임의의 셀에 [ =NaverPostCount("엑셀") ]을 입력하면 해당 키워드의 1개월 간 블로그 문서 발행량이 조회됩니다.

- 파일 저장하기 : 매크로가 포함된 파일은 "*.xlsm" 형식(매크로 포함 통합 문서)으로 저장해야 합니다. [파일] - [저장]을 선택한 뒤, '매크로 포함 통합 문서'로 파일을 저장합니다.

네 윈도우를 사용중이시라면 엑셀 2013 이후 모든 버전에서 사용가능합니다.
해당파일 우클릭 > 속성 > 차단해제 체크하시면 됩니다
엑셀 2016 및 M365 버전에서 모두 테스트 해 본 결과 이상없이 잘 동작하는 것으로 확인했습니다.
다시 한번 더 실행해보시겠어요? :)
감사합니다.
다만 카페도 이와 같이 총 발행량을 카운트하고 싶은데 HTTP 통신을 위한 URL 주소 체계를 모르겠는데 혹시 조언해주실 수 있을지요?
s.search.naver.com/p/cafe/47/search.naver?ac=1&aq=0&cafe_where=&date_from=&date_option=0&date_to=&display=30&m=0&nlu_query=%7B"r_category"%3A"18+32"%7D&nx_and_query=&nx_search_query=&nx_sub_query=&prdtype=0&prmore=1&qdt=1&query=화장실&qvt=1&spq=0&ssc=tab.cafe.all&st=rel&start=61&stnm=rel&_callback=getCafeContents&_=1718944057578
(참고로 위는 네이버 카페 검색에서 "요소검사->네트워크"를 통해 얻은 주소입니다.)
URL 쿼리의 각 항목은 직접 확인 후 분석해보셔야 합니다.
query 항목와 display 개수 등을 우선 확인해보시고, 나머지는 아래 링크를 참고하여 쿼리를 분석하는 방법을 확인해보시길 바랍니다. :)
엑셀 웹 크롤링, 이것만 알면 다 됩니다! | 네이버 부동산 - 오빠두엑셀 (oppadu.com)
감사합니다.