데이터공부
python을 사용하여 치킨집 주소 크롤링, folium으로 맵에 표시하기2 - 교촌치킨 본문
.CodeMirror { font-size: 14px; font-family :consolas; }
장모님치킨이 생각보다 매장 수가 적어서 남는 시간에 진행해본 두 번째 주소수집
이렇게 전체 목록이 쭉 나와있어서 페이지별로 수집만 하면 됐던 장모님치킨과는 달리
교촌치킨은 지역을 선택해야 해서 초반엔 당황했다.
이리저리 둘러보다 xml파일을 이용하여 수집 시작
import requests
from bs4 import BeautifulSoup
import json
import folium
import urllib.request
from xml.etree.ElementTree import parse
url = 'http://www.kyochon.com/shop/domestic.asp'
params = 'sido1='+'3'+'&sido2='+'1'+'&txtsearch='
url = url +'?'+params
namelist = list()
addrlist = list()
response = requests.get(url)
data = BeautifulSoup(response.content,'html.parser')
shopdata=data.select('ul.list')[0]
# shopdata
shopdata.select('strong')[0].text
shopdata.select('em')[1].text.split('\n')[1].replace('\t','').replace('\r','')
shopdata.select('em')[1].text.split('\n')[3].replace('\t','').replace('\r','')
'053-629-9994'addrdata = shopdata.select('em')
url = 'http://www.kyochon.com/common/xml/district/sido.xml'
request = urllib.request.Request(url)
request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36')
# headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
data = urllib.request.urlopen(request).read()
soup = BeautifulSoup(data)
sido_all=soup.find_all('sidolist')
silist=list()
for sido in sido_all:
silist.append(sido.find('sidonm').text)
silist
['서울',
'부산',
'대구',
'인천',
'광주',
'대전',
'울산',
'세종',
'경기',
'강원',
'충북',
'충남',
'전북',
'전남',
'경북',
'경남',
'제주']sidict=dict()
sidict[1]='seoul'
sidict[2]='busan'
sidict[3]='daegoo'
sidict[4]='incheon'
sidict[5]='gwangjoo'
sidict[6]='daejeon'
sidict[7]='woolsan'
sidict[8]='sejong'
sidict[9]='gyeongi'
sidict[10]='gangwon'
sidict[11]='choongbook'
sidict[12]='choongnam'
sidict[13]='jeonbook'
sidict[14]='jeonnam'
sidict[15]='gyeongbook'
sidict[16]='gyeongnam'
sidict[17]='jeju'
# sidict
dolist=list()
dodict=dict()
for i in range(1,len(silist)+1):
url = 'http://www.kyochon.com/common/xml/district/{}.xml'.format(sidict[i])
request = urllib.request.Request(url)
request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36')
# headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
data = urllib.request.urlopen(request).read()
soup = BeautifulSoup(data)
do_all = soup.find_all('sigungulist')
j = 0
for do in do_all:
j+=1
dolist.append(j)
dodict[i]=j
dodict
{1: 25,
2: 16,
3: 8,
4: 10,
5: 5,
6: 5,
7: 5,
8: 14,
9: 44,
10: 18,
11: 15,
12: 17,
13: 15,
14: 22,
15: 24,
16: 22,
17: 2}url = 'http://www.kyochon.com/common/xml/district/seoul.xml'
request = urllib.request.Request(url)
request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36')
# headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
data = urllib.request.urlopen(request).read()
soup = BeautifulSoup(data)
do_all = soup.find_all('sigungulist')
i = 0
for do in do_all:
i+=1
i
25namelist=list()
addrlist=list()
shopdict=dict()
numlist=list()
for i in range(1,len(silist)+1):
for j in range(1,dodict[i]+1):
url = 'http://www.kyochon.com/shop/domestic.asp'
params = 'sido1='+str(i)+'&sido2='+str(j)+'&txtsearch='
url = url +'?'+params
response = requests.get(url)
data = BeautifulSoup(response.content,'html.parser')
shopdata=data.select('ul.list')[0]
addrdata = shopdata.select('em')
namedata = shopdata.select('strong')
numdata = shopdata.select('em')
for k in range(0,len(addrdata)):
name = namedata[k].text
addr = addrdata[k].text.split('\n')[1].replace('\t','').replace('\r','')
num = numdata[k].text.split('\n')[3].replace('\t','').replace('\r','')
namelist.append(name+'점')
addrlist.append(addr)
numlist.append(num)
shopdict['name']=addr
print(len(namelist),len(addrlist),len(numlist))
# print(addrlist)
1177 1177 1177리스트들의 길이가 딱 맞게 나오면 기분이 참 좋다
그런데 불과 한 두 달 전에 했을 때 보다 매장이 40개 이상 늘었다.
전에 사용했던 대로 카카오api를 이용하여 카카오맵으로 위경도 수집
with open('account_id.json','r')as f:
data = f.read()
json_data = json.loads(data) #str ->obj
app_id = json_data['kakao']['app_id']
app_key = json_data['kakao']['app_key']
#print(app_id,app_key)
def getLatLng(addr):
with open('account_id.json','r')as f:
data = f.read()
json_data = json.loads(data) #str ->obj
app_id = json_data['kakao']['app_id']
app_key = json_data['kakao']['app_key']
app_key = 'KakaoAK '+ app_key
url = 'https://dapi.kakao.com/v2/local/search/address.json?query='+addr
headers = {'Authorization' : app_key}
result = requests.get(url, headers=headers)
result_json = json.loads(str(result.text))
x=result_json['documents'][0]['address']['x']
y=result_json['documents'][0]['address']['y']
return(y,x)
print(namelist)
- 잘 들어있지만 리스트가 너무 긴 이유로 생략
i=0
for j in addrlist:
print(i)
(y,x)=getLatLng(j)
i+=1
전과 같은 방법으로 나오지 않는 주소는 한땀 한땀 수정..
addrlist[29]='서울 강서구 강서로 429 마곡오드카운티1차 111호'
addrlist[71]='서울 도봉구 도당로 32'
addrlist[100]='서울 서대문구 냉천동 227'
addrlist[176]='서울 종로구 종로 294'
addrlist[196]='부산 금정구 금강로 270'
addrlist[209]='부산 남구 용호로 185'
addrlist[242]='부산 사상구 모라동 1349-4'
addrlist[271]='부산 영도구 남항동 2가 40-1'
addrlist[318]='대구 동구 동부로30길 27'
addrlist[331]='대구 북구 호암로 6'
addrlist[365]='대구 중구 남산로 49'
addrlist[385]='인천 남동구 담방로21번길 3'
addrlist[394]='인천 남동구 담방로21번길 3'
addrlist[410]='인천 서구 검단로459번길 7-3'
addrlist[412]='인천 서구 완정로 18'
addrlist[440]='광주 남구 봉선중앙로 135-1'
addrlist[467]='대전 대덕구 한남로12번길 19-9'
addrlist[537]='세종특별자치시 보듬3로 8-29'
addrlist[551]='경기 고양시 일산서구 일산로 486'
addrlist[594]='경기 남양주시 경춘로 384'
addrlist[614]='경기 부천시 소향로 25'
addrlist[706]='경기 남양주시 경춘로 384'
addrlist[754]='경기 의정부시 동일로 468'
addrlist[757]='경기 이천시 부발읍 경충대로2050번길 15-60'
addrlist[821]='강원 원주시 무실로 117'
addrlist[831]='강원 춘천시 효자로 115'
addrlist[843]='충북 음성군 금왕읍 무극로 204-1'
addrlist[870]='충북 청주시 흥덕구 오송읍 오송생명로 200'
addrlist[890]='충남 서산시 대산읍 구진로 27'
addrlist[1066]='경남 거제시 아주로 68'
addrlist[1092]='경남 사천시 사천읍 진삼로 1431'
addrlist[1122]='경남 창원시 마산합포구 진동면 진동사동로 16'
addrlist[1156]='제주특별자치도 서귀포시 일주동로 8584'
#(y,x)=getLatLng('주소')
#ylist=list()
#xlist=list()
#chicken_map = folium.Map(location=(y,x),zoom_start=9)
# for i in range(0,len(addrlist)):
# (y,x)=getLatLng(addrlist[i])
# ylist.append(y)
# xlist.append(x)
# folium.Marker((y,x),
# popup=namelist[i],icon=folium.Icon(color='lightred',icon='glyphicon glyphicon-cutlery')).add_to(chicken_map)
# chicken_map
지도에 마커로 교촌/교촌+장모님 (색구분) 위치를 찍었지만 노트북으로 업로드 하기가 힘들어서 결국 파일로 첨부한다
확실히 장모님에 비해 전국적이며 압도적으로 많다.
장모님치킨 데이터를 가져와서 마커 합체
브랜드 2개밖에 찍지 않았는데 치킨집으로 지도가 뒤덮였다.
.dataframe tbody tr th:only-of-type { vertical-align: middle;