15기 데이터 취업 스쿨 / 29일차 스터디노트 / 위키백과 정보 가져오기, 시카고 맛집 데이터 분석

구명모·2023년 6월 3일

EDA

목록 보기
9/15
post-thumbnail

● 오늘의 공부

  • 위키백과 정보 가져오기
  • 시카고 맛집 데이터 분석

♟️위키백과 정보 가져오기

위키백과에서 '여명의 눈동자'를 검색하고 주소를 복사해준다. 복사한 주소를 vscode에 붙여넣기 하면 한글이 깨져있는 상태로 입력이 된다. 이럴때 구글에서 url decode 를 이용해서 사이트에서 decode를 해주고 입력을 하면 멀쩡하게 입력이 된다. 시작 전, urllib와 urllib.request에서 urlopen과 Request 모듈을 import 해준다. decode 하면 한글 입력값을 그대로 쓸수 있지만 다르게 해보기 위해서 req라는 변수를 하나 설정해준다.
req 는 Request(html)을 해주는데 search_wrods를 format을 해줄거다. urllib.parse.quote 는 입력돼있는 글자를 URL로 인코딩을 해준다. URL로 인코딩돼서 반환이 된 req를 다시 urlopen을 이용해서 response에 할당해준다.
그리고 BEautifulSoup를 이용해 html값이 있는 변수와 변수를 실행시킬 엔진을 입력해준다.

♟️웹크롤링

여기서 우리가 찾으려는 데이터가 몇번째 인지 구분을 하기 위해서 반복문에 조건을 추가해준다. 그러면 우리가 찾을려는 정보는 주연 배우들이 목록인데 32번째 줄에 있는게 보인다.
32번째줄을 text형식으로 호출하고 strip()을 이용해서 공백 제거, html 언어와 개행을 제거해주면 위 사진처럼 나온다.

♟️시카고 맛집 데이터 분석

개요

메인페이지

url_base와 url_sub를 합친 url이란 변수를 만든다. 바로 Request를 통해 url을 부르면 HTTP 403 에러가 뜬다. status에서 보면 홈페이지는 정상으로 운영이 되지만 홈페이지에서 우리의 접근을 막은 것이다. 이때는 header={"User-Agent" : "Chrome:} 라는 문구를 통해 접근을 해준다. 쉽게 말하면 나는 크롬을 쓰고 있다이다. 그냥 접속을 할 수 있는 사이트도 있지만 그냥 접근을 했을때 안되면 headers에서 하나하나씩 추가하면 된다.

50개의 div태그와 class가 sammy인 데이터들이 있다

데이터 추출

find_all을 이용해서 class가 sammy 인 데이터들을 추출하고 그중에서 등수를 뽑기 위해 find로 class가 sammyRank인 데이터를 텍스트 형식으로 뽑아낸다. find 방식으로 식당이름, 등수, 링크를 가져온다

♟️데이터 시각화

추출한 데이터들을 DataFrame에 넣는 과정을 해본다. rank, main_menu, cafe_name, url_add를 DataFrame의 columns로 쓰고 반복문을 이용해서 리스트에 데이터들을 넣어준다. 이때 rullib.parse에서 urljoin을 import 해준다. 같이 써줄 url을 지정해놓고 url이 이미 있으면 추가를 안하지만 없으면 추가해주는 기능이다. 그리고 모든 리스트들의 길이가 50인 것을 확인을 해준다.

딕셔너리 형태로 만들고 DataFrame을 만들어준다.

요청과 응답 변수를 하나씩 설정해주고 URL 을 그대로 읽으면 HTTP 403 이 나올수도 있으니까 headers를 불러와준다. 그리고 "p" 클래스에 "addy"부분을 불러와준다. 여기서 출력된 값을 정규표현식으로 바꿔준다. 우리가 필요한 부분은 가격과 주소이기 때문에 뒤에 두개 데이터는 날려도 된다. 출력된 값을 split()으로 .,으로 구분을 시켜주고 구분시킨것의 첫번째를 불러온다. 그리고 어떤 데이터가 앞에 어떤 데이터로 시작하는지 찾아주면 $10 이 나온다. 그리고 출력된 데이터에서 가격부분에서 .과 공백을 제외한 다음부분부터 끝까지 출력하면 주소이기 때문에 리스트 슬라이싱을 이용해서 뒷부분을 가져와 준다.
3개의 리스트에 먼저 실험을 해보았는데 제대로 추가가 된 모습이다. 이제 모든 데이터를 반복문에 추가해주면 된다.
그러고 원래 있던 데이터베이스에 index를 rank로 하고 추가해주는 모습이다.

♟️지도 시각화

저장한 데이터를 불러오고 이제 구글맵에 표시를 하기 위한 작업을 할것이다. address를 불러오는데 address에 해당하는 geocode와 geocode에서 geometry에 해당하는 부분을 보면 lat과 lng가 있다. 위도와 경도이기 때문에 그들을 리스트에 추가해준다.

시카고 지역의 지도를 folium을 이용해서 불러와준다. 그리고 folium.Marker()를 이용해 마커를 찍는다.
tooltip, popup, icon도 바꿔주면 위와 같이 나온다.

♟️오늘의 공부를 마치며

세번째 프로젝트를 끝냈다. folium을 쓰면서 시각화를 했는데 folium은 보면 헷갈리진 않을거 같지만 아직 BeautifulSoup은 헷갈려서 두고두고 더 봐야할거 같다. 그리고 구글맵을 불러오는 과정도 몇 번은 더 봐야 나중에 혼자서도 잘 불러올거 같다.

profile
데린이

0개의 댓글