본문 바로가기
Data Analysis

예제 3-1. 시카고 맛집 메인페이지 데이터 분석

by ram_ 2022. 11. 21.

최종 목표 

총 50개 페이지에서 각 가게의 정보를 가져온다.

 

- 가게 이름

- 대표 메뉴

- 대표 메뉴의 가격

- 가게 주소

 


Step 01

 

크롤링 대상 페이지 검색- 구글에 chicago magazine the 50 best sandwichese를 검색한다.

https://www.chicagomag.com/Chicago-Magazine/November-2012/Best-Sandwiches-Chicago/

 

 

어떤 웹브라우저를 써서 데이터에 접근하는지 명시를 해줘야 오류가 뜨지 않는다. 

즉, headers는, 우선 하던대로 response = urlopen(url)으로 url을 열어보고 403 오류가 뜬다면 그때 req로 headers 값 지정해주면 된다. 위에서는 간략하게 Chrome으로 적어줬지만, 정석대로 한다면 #주석에 있는 값을 적어주는게 맞다.

"User-Agents"값은 개발자 도구 -> 네트워크 -> 해당 요청 이름을 누른 뒤 맨 아래로 스크롤하면 있다.

다른 방법으로는 fake-useragent를 사용할 수 있다. install 해준 뒤 import로 불러와주고 ua값에 지정. ua.ie를 출력해보면 계속 바뀌는 가상의 useragents값이 생성된다. req값의 Chorme자리에 ua.ie를 넣어줘도 에러 없이 출력 가능하다.


Step 02

 

해당 페이지에서 얻고 싶은 정보를 클릭해보니 class 가 "sammy"인 값 하위에 있는 것을 확인했다.

전체 데이터값을 불러오기 전에 예시로 첫번째 값을 테스팅 해본다.

.text로 불러온 값에 \n 등 불필요한 정보가 포함되어 있어 re를 import 해준 뒤 re.split("n|\r\n") \n과 \r\n을 기준으로 나눠주고 이를 tmp_string이라는 새로운 변수에 담아준다. 


Step 03

앞에서 테스트한 데이터들을 50개의 전체 데이터에 적용한다.

 

현재 경로 기준으로 상대주소만 나오는 것을 방지해주는 urljoin은 url_base와 현재 나오는 주소를 알아서 합쳐준다. 만약 뒷부분에 url_base가 포함되어 있다면 알아서 중복없이 추출해준다.

갯수 확인과 부분추출을 통해 데이터들이 제대로 들어가있는지 확인한다.

data 변수에 columns로 쓸 이름들을 재정의 해준 뒤, 보기좋게 정리하고 csv파일로 저장해준다.