- 
          
          시카고 샌드위치 맛집 분석하기Python 2018. 2. 22. 10:26시카고 매거진 홈페이지에 접속해서 샌드위치 가게 정보를 수집해서 지도에 표현하기 # 패키지 로딩하기 from bs4 import BeautifulSoup 
 from urllib.request import urlopen
 import re
 from urllib.parse import urljoin
 import pandas as pd
 from tqdm import tqdm_notebook
 import folium
 import pandas as pd
 import googlemaps
 import numpy as np# 웹크롤링할 사이트 
 url_base = "http://www.chicagomag.com"
 url_sub = "/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/"
 url = url_base + url_sub
 html = urlopen(url)
 soup = BeautifulSoup(html)# 순위, 메뉴, 카페 이름, 카페 주소 수집하기 
 rank = []
 main_menu = []
 cafe_name = []
 url_add = []list_soup = soup.find_all("div", "sammy") 
 for item in list_soup:
 rank.append(item.find(class_ = "sammyRank").get_text())
 tmp_string = item.find(class_ = "sammyListing").get_text()
 main_menu.append(re.split(("\n|\r\n"), tmp_string)[0])
 cafe_name.append(re.split(("\n|\r\n"), tmp_string)[1])
 url_add.append(urljoin(url_base, item.find("a")["href"]))# 데이터프레임 만들기 
 chicagomag = {"Rank":rank, "Menu":main_menu, "Cafe":cafe_name, "URL":url_add}
 chicagomagDF = pd.DataFrame(chicagomag, columns = ["Rank", "Cafe", "Menu", "URL"])# 가격과 주소 추출하기 
 price = []
 address = []
 for n in tqdm_notebook(chicagomagDF.index):
 html = urlopen(chicagomagDF["URL"][n])
 soup_tmp = BeautifulSoup(html, "lxml")
 gettings = soup_tmp.find("p", "addy").get_text()
 price.append(gettings.split()[0][:-1])
 address.append(" ".join(gettings.split()[1:-2]))# 데이터프레임에 Price, Address 열을 추가하기 
 chicagomagDF["Price"] = price
 chicagomagDF["Address"] = address
 chicagomagDF = chicagomagDF.loc[:, ["Rank", "Cafe", "Menu", "Price", "Address"]]
 chicagomagDF.set_index("Rank", inplace = True)# googlemap에서 받은 키(key) 값 세팅하기 
 gmaps_key = "xxxx"
 gmaps = googlemaps.Client(key = gmaps_key)# 카페에 대한 위도, 경도 수집하기 
 lat = []
 lng = []for n in tqdm_notebook(chicagomagDF.index): 
 if chicagomagDF["Address"][n] != "Multiple":
 target_name = chicagomagDF["Address"][n] + ", " + "Cicago"
 gmaps_output = gmaps.geocode(target_name)
 location_output = gmaps_output[0].get("geometry")
 lat.append(location_output["location"]["lat"])
 lng.append(location_output["location"]["lng"])
 else:
 lat.append(np.nan)
 lng.append(np.nan)# 데이터프레임에 lat, lng 열 추가하기 
 chicagomagDF["lat"] = lat
 chicagomagDF["lng"] = lng# 지도에 카페 위치 표시하기 
 mapping = folium.Map(location = [chicagomagDF["lat"].mean(), chicagomagDF["lng"].mean()], zoom_start = 11)for n in chicagomagDF.index: 
 if chicagomagDF["Address"][n] != "Multiple":
 folium.Marker(location = [chicagomagDF["lat"][n], chicagomagDF["lng"][n]],
 popup = chicagomagDF["Cafe"][n]).add_to(mapping)
 mapping [출처] 파이썬으로 데이터 주무르기, 민형기 지음, BJPUBLIC, p139~158 'Python' 카테고리의 다른 글텍스트마이닝 : 워드 클라우드 작성하기2 (0) 2018.02.26 텍스트마이닝 : 워드클라우드 작성하기 (0) 2018.02.26 seaborn 패키지를 이용한 산점도(scatter plot) 작성하기 (0) 2018.02.19 seaborn 패키지를 이용한 상자그림(Boxplot) 작성하기 (0) 2018.02.19 %matplotlib inline (0) 2018.02.19