[네이버부동산크롤링] 엑셀 웹 크롤링, 완벽정리!
HTTP 요청을 활용한 웹 크롤링의 기초부터 네이버 부동산 정보를 크롤링하는 실전예제까지 총정리!
이 강의에서는 엑셀 VBA에서 HTTP 요청을 활용해 웹 페이지의 데이터를 시트로 자동으로 가져오는 방법을 다룹니다. 크롬 개발자 도구로 요청 URL과 JSON 응답 구조를 분석하는 절차부터, 네이버 연관검색어와 부동산 매물 정보를 한 번의 명령문으로 추출해 보고서 작업에 즉시 활용할 수 있도록 만드는 실전 예제까지 단계별로 정리합니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
패치노트
- 2022.08.25
네이버 연관검색어 쿼리의 응답 구조가 변경되어, 기존 Splitter 함수를 아래와 같이 수정해야 올바른 결과를 반환합니다.strResult = Splitter(strResult, "items"" : [" & Chr(10) & "[", "]" & Chr(10))
- 2020.11.17
단지정보가 조회되지 않는 일부 지역을 검색할 경우, 단지정보 대신 해당 지역의 가용 매물 정보를 바로 조회하도록 명령문을 수정했습니다.
(관련 게시물 : https://www.oppadu.com/question/?uid=8068&mod=document) - 2021.01.29

네이버 부동산의 위·경도 값을 받아오기 위한 기본 접속 URL이 302 redirect 처리되도록 네이버 정책이 변경되었습니다. (getRedirectURL 함수를 사용하였습니다.)
이번 패치를 마지막으로 네이버 부동산 웹 크롤링 코드의 업데이트는 종료됩니다.
네이버 정책 변경에 따라 페이지 구조가 자주 바뀌어 명령문을 매번 수정하기에는 어려움이 큰 점 양해 부탁드립니다.
이번 강의에서 핵심으로 다룬 HTTP 요청을 통한 파싱 방법만 잘 응용하시면, 어떠한 상황에서도 손쉽게 웹 정보를 가져오실 수 있습니다.
이번 강의가 여러분의 업무 자동화에 큰 도움이 되시길 바랍니다. 감사합니다.
라이브 강의 전체 영상도 함께 확인해 보세요!
위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브 강의 풀영상을 확인하실 수 있습니다.
웹 크롤링이란 무엇인가요?
웹 크롤링(Crawl) 또는 스크레이핑(Scrape)이란 특정 웹페이지의 데이터를 추출하는 행위를 의미합니다. 우리가 일반적으로 행하는 데이터 추출 작업은 엄밀히 말해 스크레이핑이 보다 정확한 용어이지만, 이번 강의에서는 편의를 위해 '크롤링'으로 통칭하여 사용하겠습니다.
웹 크롤링의 절차는 세부적으로는 여러 단계로 나뉘지만, 크게 보면 다음 2가지 단계로 이루어집니다.
웹 크롤링으로 받아오는 데이터는 일반적으로 HTML 문서(<div>, <a> 등이 사용된 웹페이지 문서) 또는 JSON 형식으로 반환됩니다. 서버에서 데이터를 받아오는 과정 자체는 크롤링 방식과 무관하게 동일합니다.

다만, 사용자가 서버로 요청을 보내는 방식에는 차이가 있습니다. VBA뿐 아니라 다른 프로그래밍 언어에서도 마찬가지로 서버에 URL 요청을 전송하는 방식은 크게 2가지로 구분됩니다.
- HTTP/XML 요청을 사용하는 방법 (편의상 'HTTP 요청'으로 칭하겠습니다.)
- 브라우저를 사용하는 방법
엑셀은 기본적으로 인터넷 익스플로러를 제어할 수 있는 'Microsoft Internet Controls' 라이브러리를 제공하였으나, 2020년 11월 말 이후 주요 기능 업데이트가 중단되었고 이듬해부터는 모든 기능 업데이트가 종료될 예정이어서 실무에서는 더 이상 사용할 수 없는 상황입니다.
따라서 현재 VBA를 통한 웹 크롤링은 HTTP 요청을 사용하는 방식과 셀레니움(Selenium) 라이브러리를 사용하는 방식 두 가지로 압축되었습니다. (이외에도 GitHub에서 제공되는 별도 라이브러리를 사용할 수 있습니다.)

| 항목 | HTTP 요청 | 브라우저 요청 (셀레니움 Basic) |
| 호환성 | 엑셀 2010 이후 모든 버전에서 사용 가능 | 엑셀 외 별도 라이브러리 설치 필요 |
| 난이도 | 중간 | 중간 ~ 어려움 |
| 범용성 | 대부분의 페이지에서 사용 가능 | 로그인·공인인증서 접속 등 모든 상황에서 크롤링 가능 |
| 속도 | 빠름 | 보통 |
일반적으로 사용자가 필요로 하는 웹 크롤링(예: 특정 페이지의 데이터 추출)은 HTTP 요청만으로도 거의 모든 페이지를 처리할 수 있으며, 브라우저를 사용하는 방식에 비해 처리 속도가 월등히 빠르다는 장점이 있습니다.
다만 로그인 이후 페이지나 공인인증서 인증 이후 페이지처럼 특정 작업을 거쳐야만 접근할 수 있는 페이지는 반드시 브라우저를 통해 접속해야 합니다. 인터넷 익스플로러 사용이 중단된 현재로서는 셀레니움(Selenium Basic)과 크롬 브라우저를 활용한 방법으로 크롤링을 진행해야 하며, 셀레니움을 활용한 크롤링 예제는 향후 별도 강의에서 자세히 다룰 예정입니다.
URL 주소만으로 웹 크롤링을 할 수 없는 경우
웹 크롤링을 진행하다 보면 URL 주소만으로는 데이터를 가져올 수 없는 상황이 종종 발생합니다. 특히 하나의 페이지 안에서 다양한 종류의 DB를 다루는 경우가 대부분 이에 해당하는데요. 아래 예제를 통해 두 경우를 비교해 보겠습니다.
URL 주소로 데이터를 크롤링할 수 있는 경우
- 네이버 홈페이지에 접속합니다. (https://www.naver.com)

- 검색할 단어를 입력한 뒤 [검색] 버튼을 클릭하면 검색결과 페이지로 이동하면서 상단의 URL 주소도 함께 변경됩니다.

- URL 주소의 쿼리문을 적절히 분석하면 URL만으로 손쉽게 데이터를 크롤링할 수 있습니다.
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EC%97%91%EC%85%80
↓
https://search.naver.com/search.naver?query=엑셀
URL 주소로 데이터를 크롤링할 수 없는 경우
- 네이버 홈페이지에 접속합니다. (https://www.naver.com)

- 검색할 단어의 일부 글자만 입력합니다.

- 검색어 아래로 연관검색어 목록이 표시되면서 페이지 구조가 바뀌지만, 상단의 URL 주소는 그대로 유지됩니다. 이런 경우에는 URL 주소만으로 크롤링이 불가능하며, 페이지 안에서 실행된 자바스크립트 명령문이 반환하는 또 다른 URL을 분석해 데이터를 가져와야 합니다. 브라우저의 개발자 도구를 활용하면 페이지 구조를 손쉽게 분석할 수 있습니다.

웹 크롤링으로 반환되는 2가지 대표 형식, HTML vs JSON
웹 크롤링으로 반환되는 데이터는 크게 HTML 형식과 JSON 형식으로 구분됩니다.
HTML 형식은
JSON 형식은
쉽게 말해 HTML은 페이지의 모든 정보(서식, 글꼴, 부가 자료까지 포함)를 반환하고, JSON은 원하는 특정 데이터(예: '엑셀' 연관검색어, 특정 지역의 단지 목록)만 반환할 때 사용됩니다.
두 데이터 형식의 차이점을 요약하면 아래와 같습니다.
| 항목 | HTML | JSON |
| 단어 | HyperText Markup Language | JavaScript Object Notation |
| 형식 | 다양한 태그·구성요소가 포함됨 (예: div, a, h1, h2, p, 그 외 서식 등) |
데이터와 구분기호(대괄호·중괄호)만 포함 |
| 데이터 추출 | HTML 문서 라이브러리의 GetElement 계열 함수로 손쉽게 추출 가능 | 별도의 함수 또는 파싱 프로그램 필요 (ParseJSON 함수 확인하러 가기) |
| 사용 목적 | 웹 페이지 데이터를 사용자가 보기 좋게 꾸며 출력하기 위함 | 데이터 전달 자체만을 위함 |
네이버 연관검색어 크롤링
이번 강의에서는 네이버 연관검색어를 가져오는 방법과 부동산 매물 정보를 크롤링하는 방법을 살펴봅니다. 이번 강의에서 사용되는 매크로는 Windows OS 엑셀에서만 사용 가능합니다.
Mac에서는 HTTP 요청 라이브러리가 제공되지 않으므로 이번 강의의 내용으로는 진행이 불가능합니다.
브라우저의 개발자 도구는 모든 브라우저에서 제공되지만, 이번 강의에서는 크롬을 기준으로 진행합니다.
네이버 연관검색어 크롤링에 사용된 전체 명령문
Sub 연관검색어() ' 변수 설정 Dim URL As String Dim htmlResult As Object '<- GetHTTP 명령문의 결과값 ... >> HTML 문서 Dim strResult As String '<-htmlResult 에서 받아온 HTML 문자열 Dim strSearch As String '<- 검색단어 Dim v As Variant Dim i As Long strSearch = Sheet2.Range("C2").Value URL = "https://mac.search.naver.com/mobile/ac?q=" & strSearch & "&frm=nv&st=100" Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML strResult = Splitter(strResult, "items"" : [ [", "] ] }") v = Split(strResult, ",") For i = LBound(v) To UBound(v) v(i) = Replace(Replace(v(i), "[""", ""), """]", "") Next ArrayToRng Sheet2.Range("A1"), v End Sub
네이버 연관검색어 크롤링 단계별 살펴보기
- 네이버 홈페이지에 접속한 뒤, 크롬 창이 활성화된 상태에서 키보드 F12키를 눌러 개발자 도구를 실행합니다.

- 개발자 도구의 [Network] 탭으로 이동합니다.

- 검색창에 원하는 단어를 입력하면 개발자 도구에 새로운 URL이 표시됩니다.

- 해당 URL을 선택한 뒤 [Response] 탭으로 이동하면 URL이 반환하는 JSON 데이터를 확인할 수 있습니다.

- [Headers]로 이동한 뒤 Request URL 주소를 확인합니다. 해당 주소를 복사해 메모장에 붙여 넣습니다.

- URL 주소에서 불필요한 쿼리를 제거하고 다음과 같이 정리합니다.
https://ac.search.naver.com/nx/ac?q=키워드&st=100
- 해당 URL이 반환한 JSON 데이터에서 필요한 결과값만 추출할 수 있도록, Splitter 사용자 정의 함수를 활용해 연관검색어 결과만 리턴합니다.
' 변수 설정 Dim URL As String Dim htmlResult As Object '<- GetHTTP 명령문의 결과값 ... >> HTML 문서 Dim strResult As String '<-htmlResult 에서 받아온 HTML 문자열 Dim strSearch As String '<- 검색단어 Dim v As Variant Dim i As Long strSearch = Sheet2.Range("C2").Value URL = "https://mac.search.naver.com/mobile/ac?q=" & strSearch & "&frm=nv&st=100" Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML strResult = Splitter(strResult, "items"" : [ [", "] ] }")
- 리턴된 배열을 시트 위에 출력하여 명령문 작성을 마무리합니다.
v = Split(strResult, ",") For i = LBound(v) To UBound(v) v(i) = Replace(Replace(v(i), "[""", ""), """]", "") Next ArrayToRng Sheet2.Range("A1"), v
네이버 부동산 매물 정보 크롤링
크롬 개발자 도구의 Network 요청과 각 페이지에서 반환되는 데이터를 적절히 분석하면 대부분의 웹 페이지 정보를 크롤링할 수 있습니다. 네이버 부동산 매물 정보 크롤링은 모든 내용을 텍스트로 정리하기에는 분량이 길어지는 관계로, 각 단계별 명령문을 간단히 요약하여 설명드립니다. 자세한 내용은 영상 강의를 참고해 주세요.
해당 명령문에는 사용자 지정 함수가 사용되었습니다.
따라서 모듈 안에 사용자 지정 함수를 반드시 추가해야만 명령문이 정상적으로 동작합니다.
네이버 부동산 크롤링에 사용된 전체 명령문
Sub NaverLandCrawl(city As String, isImage As Boolean) '########################################################## ' 변수 설정 Dim htmlResult As Object Dim strResult As String Dim URL As String '########################################################## '1. 네이버 부동산 메인 페이지 -> 지역 검색 ' -> 가용 매물 목록을 받아오기 위한 위/경도, 그 외 변수 추출 '[ https://meyerweb.com/eric/tools/dencoder/ ] '-> URL 디코딩/인코딩 '[ http://json.parser.online.fr/ ] '-> JSON 파서 URL = "https://m.land.naver.com/search/result/" & city '-------------------------------------------- ' 2021.01.29 수정 ' 네이버 부동산 접속경로가 302 redirect 되면서 html 파싱 방법이 변경되었습니다. ' 따라서 redirect 된 URL에서 값을 받아 오도록 명령문을 수정하였는데요. ' 지난번 네이버 로그인 강의 이후에도 동일한 상황이 있었는데요. 이번에도 강의 업로드 이후 네이버에서 관련 정책을 바꾸는 관계로 2차 수정을 하였습니다. ' 크롤링이라는 것은 어느 인터넷 정보제공자라도 원치 않는 작업일 것입니다. ' 이번 2차 수정을 마지막으로 네이버 부동산 웹크롤링 코드는 수정을 종료하려고 합니다. ' 감사합니다. '--------------------------------------- 'Set htmlResult = GetHttp(URL) 'strResult = htmlResult.body.innerHTML 'strResult = Splitter(strResult, "filter: {", "},") Dim vResult As Variant Dim idx As Long strResult = GetRedirectURL(URL) strResult = Splitter(strResult, "/map/", "?") strResult = Replace(strResult, "/*/", ":") vResult = Split(strResult, ":") '---------------------------------------- ' 매물유형 예) 아파트: APT, 빌라 : VL, 오피스텔: OPST, ...적절히 수정 ' 건물유형 A1, B1, ... 적절히 수정가능 '---------------------------------------- '---------------- 해당 지역(메인) 위/경도 + 그 외 변수 생성 Dim lat As String: lat = vResult(0) Dim lon As String: lon = vResult(1) Dim z As String: z = vResult(2) Dim cortarNo As String: cortarNo = vResult(3) Dim searchType As String: searchType = "APT" Dim buildingType As String For idx = 4 To UBound(vResult) buildingType = buildingType & vResult(idx) & ":" Next buildingType = Left(buildingType, Len(buildingType) - 1) '------------------------------------------------------------------------------------------------ '######################################################### ' 2. 네이버 부동산 지도 페이지 -> 받아온 위/경도, 그 외 변수로 검색 ' -> 해당 지역 가용매물 목록의 상세 위/경도 추출 Debug.Print "2" URL = "https://m.land.naver.com/cluster/clusterList?view=actl&cortarNo=" & cortarNo & "&rletTpCd=" & searchType & "&tradTpCd=" & buildingType & _ "&z=" & z & "&lat=" & lat & "&lon=" & lon & "&addon=COMPLEX&bAddon=COMPLEX&isOnlyIsale=false" Set htmlResult = Nothing Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML Dim forceCOMPLEX As Boolean If InStr(1, strResult, "COMPLEX") > 0 Then strResult = Splitter(strResult, "COMPLEX"): forceCOMPLEX = True Dim v As Variant v = ParseJSON(strResult, "lgeo,lat,lon,count") '########################################################## ' 3. 네이버 부동산 매물페이지 -> 상세 위 경도로 매물 정보 검색 ' -> 각 매물별 상세정보 추출 ' 매물페이지는 페이지당 20개씩만 출력.. 그래서 추가 작업 필요! ' Set htmlResult = Nothing ' Set htmlResult = GetHttp(URL) ' strResult = htmlResult.body.innerHTML ' vReturn = ParseJSON(strResult, "hscpNm,hscpNo,scpTypeCd,hscpTypeNm,totDongCnt,totHsehCnt,genHsehCnt,useAprvYmd,repImgUrl,dealCnt,leaseCnt,rentCnt," & _ "strmRentCnt,totalAtclCnt,minSpc,maxSpc,dealPrcMin,dealPrcMax,leasePrcMin,leasePrcMax,isalePrcMin,isalePrcMax,isaleNotifSeq,isaleScheLabel,isaleScheLabelPre", city, "<em class="txt_unit">,</em>") Dim i As Long: Dim iPage As Long: Dim j As Long Dim vReturn As Variant Dim x As Long: x = GetLastRow(Sheet1) + 1 Dim initR As Long initR = x For i = LBound(v, 1) To UBound(v, 1) If v(i, 1) <> "" Then iPage = Application.WorksheetFunction.RoundUp(v(i, 4) / 20, 0) For j = 1 To iPage If forceCOMPLEX = False Then URL = "https://m.land.naver.com/cluster/ajax/articleList?itemId=" & v(i, 1) & "&lgeo=" & v(i, 1) & _ "&rletTpCd=" & searchType & "&tradTpCd=" & buildingType & "&z=" & z & "&lat=" & v(i, 2) & "&lon=" & v(i, 3) & "&cortarNo=" & cortarNo & _ "&isOnlyIsale=false&sort=readRank&page=" & j Debug.Print URL Set htmlResult = Nothing Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML If InStr(1, strResult, "atclNo") > 0 Then vReturn = ParseJSON(strResult, "atclNm,atclNo,tradTpCd,rletTpNm,totDongCnt_tmp,totHsehCnt_tmp,genHsehCnt_tmp,atclCfmYmd,repImgUrl,tradTpNm,flrInfo,atclTetrDesc," & _ "strmRentCnt_tmp,totalAtclCnt_tmp,spc1,spc2,sameAddrMinPrc,sameAddrMaxPrc,minMviFee,maxMviFee,cpid,cpNm,rltrNm,isaleScheLabel_tmp,isaleScheLabelPre_tmp", city, "<em class="">,</em>") ArrayToRng Sheet1.Cells(x, 4), vReturn x = x + UBound(vReturn, 1) End If Else URL = "https://m.land.naver.com/cluster/ajax/complexList?itemId=" & v(i, 1) & "&lgeo=" & v(i, 1) & _ "&rletTpCd=" & searchType & "&tradTpCd=" & buildingType & "&z=" & z & "&lat=" & v(i, 2) & "&lon=" & v(i, 3) & "&cortarNo=" & cortarNo & "&isOnlyIsale=false&sort=readRank&page=" & j Set htmlResult = Nothing Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML If InStr(1, strResult, "hscpNo") > 0 Then vReturn = ParseJSON(strResult, "hscpNm,hscpNo,scpTypeCd,hscpTypeNm,totDongCnt,totHsehCnt,genHsehCnt,useAprvYmd,repImgUrl,dealCnt,leaseCnt,rentCnt," & _ "strmRentCnt,totalAtclCnt,minSpc,maxSpc,dealPrcMin,dealPrcMax,leasePrcMin,leasePrcMax,isalePrcMin,isalePrcMax,isaleNotifSeq,isaleScheLabel,isaleScheLabelPre", city, "<em class="">,</em>") ArrayToRng Sheet1.Cells(x, 4), vReturn x = x + UBound(vReturn, 1) End If End If Next End If Next '######################################################### ' 4. 대표 이미지 삽입 If isImage = True Then Dim shpImg As Shape: Dim shpRng As Range For j = initR To Sheet1.Cells(Sheet1.Rows.Count, 4).End(xlUp).Row + 1 Set shpRng = Sheet1.Cells(j, 13) If shpRng.Value <> "" Then shpRng.EntireRow.RowHeight = 80 InsertWebImage shpRng, "https://landthumb-phinf.pstatic.net" & shpRng.Value Else shpRng.EntireRow.RowHeight = 18 End If Next End If End Sub
네이버 부동산 정보 크롤링 단계별 살펴보기
- 네이버 부동산 매물 정보 크롤링에 사용할 기본 변수를 선언합니다.
'########################################################## ' 변수 설정 Dim htmlResult As Object Dim strResult As String Dim URL As String
- 네이버 부동산 메인 페이지에서 지역 정보를 검색해 반환되는 해당 지역의 고유값을 추출합니다.
'########################################################## '1. 네이버 부동산 메인 페이지 -> 지역 검색 ' -> 가용 매물 목록을 받아오기 위한 위/경도, 그 외 변수 추출 '[ https://meyerweb.com/eric/tools/dencoder/ ] '-> URL 디코딩/인코딩 '[ http://json.parser.online.fr/ ] '-> JSON 파서 URL = "https://m.land.naver.com/search/result/" & city Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML strResult = Splitter(strResult, "filter: {", "},") '---------------------------------------- ' 매물유형 예) 아파트: APT, 빌라 : VL, 오피스텔: OPST, ...적절히 수정 ' 건물유형 A1, B1, ... 적절히 수정가능 '---------------------------------------- '---------------- 해당 지역(메인) 위/경도 + 그 외 변수 생성 Dim lat As String: lat = Splitter(strResult, "lat: '", "',") Dim lon As String: lon = Splitter(strResult, "lon: '", "',") Dim z As String: z = Splitter(strResult, "z: '", "',") Dim cortarNo As String: cortarNo = Splitter(strResult, "cortarNo: '", "',") Dim searchType As String: searchType = "APT" Dim buildingType As String: buildingType = "A1:B1:B2" '------------------------------------------------------------------------------------------------
- 해당 지역의 고유값을 인수로 사용해 지역 내 가용 단지 정보를 받아옵니다.
'######################################################### ' 2. 네이버 부동산 지도 페이지 -> 받아온 위/경도, 그 외 변수로 검색 ' -> 해당 지역 가용매물 목록의 상세 위/경도 추출 URL = "https://m.land.naver.com/cluster/clusterList?cortarNo=" & cortarNo & "&rletTpCd=" & searchType & "&tradTpCd=" & buildingType & _ "&z=" & z & "&lat=" & lat & "&lon=" & lon & "&addon=COMPLEX&bAddon=COMPLEX&isOnlyIsale=false" Set htmlResult = Nothing Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML Dim v As Variant v = ParseJSON(strResult, "lgeo,lat,lon,count")
- 각 단지 안의 가용 매물 정보를 추출합니다.
'########################################################## ' 3. 네이버 부동산 매물페이지 -> 상세 위 경도로 매물 정보 검색 ' -> 각 매물별 상세정보 추출 ' 매물페이지는 페이지당 20개씩만 출력.. 그래서 추가 작업 필요! ' Set htmlResult = Nothing ' Set htmlResult = GetHttp(URL) ' strResult = htmlResult.body.innerHTML ' vReturn = ParseJSON(strResult, "hscpNm,hscpNo,scpTypeCd,hscpTypeNm,totDongCnt,totHsehCnt,genHsehCnt,useAprvYmd,repImgUrl,dealCnt,leaseCnt,rentCnt," & _ "strmRentCnt,totalAtclCnt,minSpc,maxSpc,dealPrcMin,dealPrcMax,leasePrcMin,leasePrcMax,isalePrcMin,isalePrcMax,isaleNotifSeq,isaleScheLabel,isaleScheLabelPre", city, "<em class="txt_unit">,</em>") Dim i As Long: Dim iPage As Long: Dim j As Long Dim vReturn As Variant Dim x As Long: x = GetLastRow(Sheet1) + 1 Dim initR As Long initR = x For i = LBound(v, 1) To UBound(v, 1) iPage = Application.WorksheetFunction.RoundUp(v(i, 4) / 20, 0) For j = 1 To iPage URL = "https://m.land.naver.com/cluster/ajax/complexList?itemId=" & v(i, 1) & "&lgeo=" & v(i, 1) & _ "&rletTpCd=" & searchType & "&tradTpCd=" & bulidingtype & "&z=" & z & "&lat=" & v(i, 2) & "&lon=" & v(i, 3) & "&cortarNo=" & cortartno & _ "&isOnlyIsale=false&sort=readRank&page=" & j Set htmlResult = Nothing Set htmlResult = GetHttp(URL) strResult = htmlResult.body.innerHTML vReturn = ParseJSON(strResult, "hscpNm,hscpNo,scpTypeCd,hscpTypeNm,totDongCnt,totHsehCnt,genHsehCnt,useAprvYmd,repImgUrl,dealCnt,leaseCnt,rentCnt," & _ "strmRentCnt,totalAtclCnt,minSpc,maxSpc,dealPrcMin,dealPrcMax,leasePrcMin,leasePrcMax,isalePrcMin,isalePrcMax,isaleNotifSeq,isaleScheLabel,isaleScheLabelPre", city, "<em class="txt_unit">,</em>") ArrayToRng Sheet1.Cells(x, 4), vReturn x = x + UBound(vReturn, 1) Next Next
- 매물 정보의 이미지 주소를 활용해 각 단지별 대표 이미지를 시트 위에 삽입합니다.
'######################################################### ' 4. 대표 이미지 삽입 If isImage = True Then Dim shpImg As Shape: Dim shpRng As Range For j = initR To Sheet1.Cells(Sheet1.Rows.Count, 4).End(xlUp).Row + 1 Set shpRng = Sheet1.Cells(j, 13) If shpRng.Value <> "" Then shpRng.EntireRow.RowHeight = 80 InsertWebImage shpRng, "https://landthumb-phinf.pstatic.net" & shpRng.Value Else shpRng.EntireRow.RowHeight = 18 End If Next End If
- 네이버 부동산 엑셀 웹 크롤링 명령문과 초기화 명령문을 작성한 뒤, 시트 위 동작 버튼을 추가하여 부동산 크롤링 프로그램 작성을 마무리합니다.
Sub 네이버부동산크롤링() Application.ScreenUpdating = False Application.EnableEvents = False NaverLandCrawl Sheet1.Range("D5").Value, Sheet1.Range("E5").Value Application.ScreenUpdating = True Application.EnableEvents = True End Sub Sub 초기화() Dim Shp As Shape For Each Shp In Sheet1.Shapes If Left(Shp.Name, 3) <> "btn" Then Shp.Delete Next With Sheet1 .Range(.Cells(9, 4), .Cells(GetLastRow(Sheet1), 29)).ClearContents .Range(.Cells(9, 4), .Cells(GetLastRow(Sheet1), 29)).RowHeight = 18 End With End Sub
영상 계속 반복하면서 하나씩 따라하다보니 완성이 되긴 하였는데, 이걸 실전에 어떻게 응용해야 될지 감이 잘 오지를 않지만 좋은 내용 공유해주셔서 너무나 감사드립니다.
문제해결을 접근하는 방식이 매우 맘에 듭니다..
예제파일은 매크로가 포함되지 않은 연습용 파일입니다.
예제파일을 다운받은 뒤, 강의 순서에 따라 포스트에 적어드린 명령문을 복사/붙여넣기 하여 파일을 완성해주세요.
감사합니다.
죄송하지만 네이버 부동산 크롤링에 사용된 전체 명령문을 다시 수정해주 실수 있나요?
극초보라 죄송합니다.
파이썬으로만 웹크롤링 하려 했는데 VBA로도 원하는 결과를 얻을수 있을거 같네요
알려주신 방법 잘 활용해서 실무에 활용해보겠ㅅ브니다 ^^
크롤링 강의를 완강을 하고 제가 원하는 데이터를 크롤링하려고 하는데
(예를들어 전국맛집정보, 전국 관광지 정보) 이런걸 크롤링으로 하려면 어떻게 해야하나요??
실제로 필요한 데이터 크롤링을 위한 수정이 어렵습니다.
도움좀 부탁드립니다
https://www.oppadu.com/%ec%97%91%ec%85%80-vba-%ec%9b%b9-%ed%81%ac%eb%a1%a4%eb%a7%81-%ea%b0%95%ec%9d%98-%eb%84%a4%ec%9d%b4%eb%b2%84-%eb%89%b4%ec%8a%a4-%ec%8a%a4%ed%81%ac%eb%9e%a9/
부동산가격 이렇게 나오는데 뭐가 문제일까요?ㅠ
3<EM class=txt_unit>억</EM> 9,000
를 추가해주세요.
명령문의 아래 부분을 확인해보시길 바랍니다.
Sub 연관검색어()
' 변수 설정
Dim URL As String
Dim htmlResult As Object '<- GetHTTP 명령문의 결과값 ... >> HTML 문서
Dim strResult As String '<-htmlResult 에서 받아온 HTML 문자열
Dim strSearch As String '<- 검색단어
Dim v As Variant
Dim i As Long
strSearch = Sheet2.Range("C2").Value
URL = "https://mac.search.naver.com/mobile/ac?q=" & strSearch & "&frm=nv&st=100"
Set htmlResult = GetHttp(URL)
strResult = htmlResult.body.innerHTML
strResult = Splitter(strResult, "items"" : [ [", "] ] }")
v = Split(strResult, ",")
For i = LBound(v) To UBound(v)
v(i) = Replace(Replace(v(i), "[""", ""), """]", "")
Next
ArrayToRng Sheet2.Range("A1"), v
End Sub
그대로 복사해서 넣었습니다 ㅠ
시트 2 도 만들었구요
소스코드를 계속 바꿔서 테스트 해보니 Splitter 함수가 실행이 되는데,
아래와 같이 입력한 (이 페이지에 올리신 소스 복붙한 것임)것과 네이버에서 불러온 것이 다른지 잘라내기를 하지 않고 넘어가버리네요.
3시간 째 잡고 있는데 해결이 안 됩니다.
도와주세요.
원래 네이버에서 불러온 코드에는 줄바꿈이 되어 있는데 그것 때문이 아닌가 추정만 하고 있습니다.
홈페이지에서 제공해드리는 완성파일로도 테스트해보셨나요?^^ Splitter의 마지막 인수로 띄어쓰기가 누락되어서 그런 듯 합니다.
한번 완성파일과 비교해보세요.