지방이의 Data Science Lab

[Python] 네이버맵: json을 이용한 매장정보 크롤링 본문

Python Selenium/Web Crawling

[Python] 네이버맵: json을 이용한 매장정보 크롤링

[지현] 2019. 3. 7. 17:27

요새 버전이 변경되었고 페이지수 안나오게 바껴서 구버전으로 이용하면 된다.

v4로 가서 활용하면 된다.

 

네이버맵: json을 이용한 매장정보 크롤링

원하는 매장 갯수 전부 긁어올 수 있는 유일했던 수단

 

앞서 셀레니움방식과 api로 크롤링하는 방식으로 매장정보(이름, 주소, 등등)을 긁어오려 했다. 

앞선 방식들은 카카오맵이나 네이버맵 심지어 구글맵까지 해봤는데 갯수 제한이 걸려있었다. 

이걸 해결할 수 있던 유일한 수단은 json이었다. 

 

F12를 눌러서 필요한 headers값을 가져온 후, 붙여넣는다. json이 Series로 가져와지면 

변환 후, 저정하면 끝이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from bs4 import BeautifulSoup as bs
from selenium import webdriver
import time
import numpy as np
import pandas as pd
 
name=[];address=[];roadaddress=[];abbraddress=[];tel=[];x=[];y=[];
for k in range(123):
url='https://map.naver.com/search2/local.nhn?query=%EC%98%AC%EB%A6%AC%EB%B8%8C%EC%98%81&page='+str(k+1)+'&type=SITE_1&queryRank=1&re=1&siteSort=0&menu=location&searchCoord=126.945975%3B37.5655025&sm=clk&mpx=09410114%3A37.5585674%2C126.9459641%3AZ9%3A0.0531249%2C0.1163489'
headers={ ~~~~}
res = requests.get(url = url,headers=headers)
a=res.json()
for i in a['result']['site']['list']:
a=(i["name"]) ;name.append(a)
b=(i["address"]);address.append(b)
c=(i["roadAddress"]);roadaddress.append(c)
d=(i["abbrAddress"]);abbraddress.append(d)
e=(i["telDisplay"]);tel.append(e)
f=(i["x"]) ;x.append(f)
g=(i["y"]);y.append(g)
time.sleep(3)
 
Oliveyoung = pd.DataFrame({'Name':name,'Address':address,'Roadaddress':roadaddress,'AbbrAddress':abbraddress,'Tel':tel,'Longitude':x,'Latitude':y})
Oliveyoung=Oliveyoung.replace(r'^\s+$', np.nan, regex=True)Oliveyoung["Name"].replace('',np.NaN,inplace=True)Oliveyoung["Address"].replace('',np.NaN,inplace=True)
Oliveyoung["Roadaddress"].replace('',np.NaN,inplace=True)
Oliveyoung["Tel"].replace('',np.NaN,inplace=True)
Oliveyoung["AbbrAddress"].replace('',np.NaN,inplace=True)
Oliveyoung["Longitude"].replace('',np.NaN,inplace=True)
Oliveyoung["Latitude"].replace('',np.NaN,inplace=True)
Oliveyoung.to_csv('Oliveyoung_json.csv', sep=",",encoding='ms949'#한글이 깨져서 인코딩
 

 

 

 

 

+추가

위 코드 headers 부분이 궁금하신 분은 아래를 참고해주세요.

 

[python] json 크롤링 header

헤더에 대한 문의가 많길래 올립니다. 위 값을 그대로 넣어주시면 됩니다. 제 코드를 참조하실 분들은 headers = header 라고 제가 비워둔 부분에 쓰시면 됩니다.

jlim0316.tistory.com

 

Comments