크롤한 웹데이터로 만들어보는 웹사이트
주요 메모 사항
프로젝트 시작 전에 미리 팀원들과 얘기를해 미리 주제를 선정했다.
주제는 지하철 유동인구 시각화 였고, 서울시를 기준으로 작업하기로 했다.
- [서울시 지하철호선별 역별 승하차 인원 정보] | [서울시 지하철 호선별 역별 시간대별 승하차 인원 정보]
- 5명으로 이뤄진 팀이였기 때문에 5개 호선만 작업하기로 했다. (인원이 가장 많은 1, 2, 3, 4, 7 호선)
팀원분들이 결과물에 집중하기 보다는 경험에 초점을 두고 프로젝트를 진행하자고 얘기되었다.
첫날에는 모두가 크롤링해보는 작업을 각자 진행해보기로 했고, 저녁 코어타임이 끝나고 공유하기로 했었다.
다들 1개의 호선을 선택해 크롤링을 진행하기로 했었기에 그냥 제일 가까운 1호선을 선택했다.
작성했던 코드는 링크에 남겨뒀다.
- driver.page_source 는 페이지의 모든 html을 가져온다.
- pandas의 read_html(html)은 페이지의 테이블들을 가져온다. 해당 사이트에서는 sheet가 6번째 테이블로 존재했기 때문에 [5]로 선언하여 sheet만 가져올 수 있었다.
지금 생각해 보면 크롤링 코드를 작성할 때, 아무 생각없이 비동기적으로 .implicitly_wait()만 사용했었는데 이게 아주 큰 실수 였다. (이 당시에는 문제가 없었으나 추후에 발생한 issue)
- 여러번 코드를 테스트 하던 중에 df에 NaN만 존재해 오류가 나는 경험을 했었다.
- 명시적 대기를 사용하지 않고 그냥 암묵적 대기만 사용해서 html을 가져오는 와중에 이미 코드에서는 df으로 변환하는 직업이 진행되었던 것.
위 이미지를 보면 알 수 있지만 1호선을 검색했을 때 공항철도 1호선도 같이 나오는 issue가 있었는데, 초기에는 모두 다 크롤링해 DataFrame에서 수정하는 작업을 진행했었다.
- 이후 계속해서 작업을 진행하면서 찾아낸 것이 호선명을 클릭하면 정렬 기준이 바뀐다는 것
- 코드에도 주석으로 남겨놨지만, 다시 설명하자면 None -> Desc -> Asc 로 바뀐다.
- page_source를 가져오기 전에 호선명을 2번 더 클릭하는 것으로 리소스를 조금 줄이지 않았나 싶다.
공부하며 어려웠던 내용
사실 크롤링 하는 과정 자체가 노가다 라고 생각한다...
openAPI를 사용하지 않고 직접 sheet를 크롤하려고 하다보니 페이지 자체를 조금 이해해야 XPATH를 이해하기 쉬울 것 이다. 처음 시작에 있어서 이 맥락을 파악하기가 조금 힘들었다.
'프로그래머스 데브코스-데이터 엔지니어 > TIL(Today I Learned)' 카테고리의 다른 글
05/03 18일차 프로젝트 3일차 (0) | 2023.05.06 |
---|---|
05/02 17일차 프로젝트 2일차 (0) | 2023.05.02 |
04/28 15일차 파이썬 장고 프레임웍을 사용해서 API 서버 만들기 (5) (0) | 2023.04.28 |
04/27 14일차 파이썬 장고 프레임웍을 사용해서 API 서버 만들기 (4) (0) | 2023.04.27 |
04/26 13일차 파이썬 장고 프레임웍을 사용해서 API 서버 만들기 (3) (0) | 2023.04.26 |