메타코드M '웹 크롤링 기초 강의'의 마지막 시간이다. 이번에는 크롤링으로 데이터를 수집하는 것뿐만 아니라 분석과 시각화까지 진행하고자 한다.
※ 이전글: 2024.03.29 - [Python/Web Crawling] - [데이터 수집] 메타코드M '웹 크롤링 기초 강의' #3 - 기차표 티켓팅 프로젝트
Index
4강. 관광상품 리뷰 데이터 크롤링 프로젝트
사이트 규정 & 페이지 구조 파악, 동적 페이지 데이터 크롤링
하나투어의 데이터를 크롤링하기 위해 robots.txt를 확인했다.
[베스트] 카테고리에서 주간 베스트 중 일본으로 국가를 선택해 가장 첫번째에 있는 여행 상품을 택했다. 여행 후기를 클릭해 내용을 보는데 URL 등의 변화가 없지만 댓글은 계속해서 변하는 것을 확인했다. 이러한 웹 페이지를 크롤링할 때, Selenium이 유용하다.
Selenium이 무거운 편이라 페이지 로딩이 느릴 수 있다. 그래서 특정 조건을 만족할 때까지 기다려주는 expected_conditions를 불러와 EC라는 약어로 지정하고 진행했다. presence_of_element_located는 괄호 안의 요소를 찾을 때까지 기다려달라는 뜻이다.
CSS_SELECTOR로 데이터를 가져왔는데 여러 상황에서 쓸 수 있겠지만 단계적으로 구성된 것을 가져올 때 주로 사용되는 듯하다.
딕셔너리 활용 데이터 크롤링과 저장
딕셔너리로 리뷰 정보를 저장하는 이유는 key별로 value를 줄 수 있어서 데이터프레임에 데이터를 전달하기 쉽기 때문이다.
if문을 한 줄로 적을 수 있는데 review가 있다면 review에서 텍스트 부분을 가져오고 없으면 아무것도 넣지 말라는 코드이다.
위 이미지처럼 반복문 결과, 딕셔너리 형태로 저장되고 이를 데이터프레임으로 만들어 본다.
페이지네이션
1~199페이지까지 돌며 리뷰 데이터를 가져오도록 코딩한다.
페이지 숫자들을 찾는 3개의 코드이다.
하나투어 리뷰 페이지는 다음 버튼을 클릭하면 하나씩 올라가는 게 아니라 10개씩 올라가 다음 페이지를 표시한다. 11페이지에서 다음 버튼을 누르면 21페이지를 표시하는 것이다.
한 페이지씩 바뀌는 것은 f-string으로 XPath를 표현했고, 다음 버튼을 클릭해 십의 자리가 바뀌는 것을 구현했다. 위 코드는 a 옆 대괄호 안의 숫자가 1씩 커진다는 의미다. try 밑에 if, else를 써서 상세 조건을 부여할 수 있다.
그 결과, 93페이지를 끝으로 916개의 데이터를 가져왔는데 review category가 없는 데이터도 꽤 있는 것으로 보인다.
데이터 시각화 및 분석
저장한 CSV 파일을 불러와서 진행한다.
후쿠오카, 규슈 관광상품에 대한 카테고리별, 월별 리뷰 수, 나이별 평균 평점 등을 시각화한다.
후쿠오카, 규슈 관광상품은 가족여행으로 가장 좋고, 10대와 80대에서 좋은 반응을 얻고 있다는 것을 알 수 있다. 또 최근 들어 리뷰 수가 늘어나는 추이를 보이고 있는 것도 확인 가능하다.
에러 메시지
'FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead. with pd.option_context('mode.use_inf_as_na', True):'
강의에서는 에러가 발생하지 않았으나 필자의 데이터로 따로 코딩을 했더니 날짜별 데이터를 시각화하는 부분에서 상기 에러가 발생했다. 이를 처리한다면 더 좋은 그래프가 될 것이다.
코드 메모
mdates를 불러와서 날짜 데이터를 다양한 형태로 활용할 수 있는 듯하다. 본 강의에서는 mdates로 월별 리뷰 데이터를 나타내는 데 사용했다.
plt.tight_layout()으로 그래프의 여백을 줄이는 것도 깔끔해서 보기 좋았다.
특정 문자로 끝나는 것은 str.endswith를 써서 찾을 수 있다.
이것으로 메타코드M '웹 크롤링 기초 강의' 관련 포스팅을 마무리짓고자 한다. 늘 그렇듯이 강의를 다 들은 것으로 만족하지 말고 다른 주제로 넘어가 직접 코딩을 하며 실력을 계속 쌓아야 할 것이다.
'Python > Web Crawling' 카테고리의 다른 글
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #3 - 기차표 티켓팅 프로젝트 (0) | 2024.03.29 |
---|---|
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #2 - 뉴스 크롤링 자동화 프로젝트 (2) | 2024.03.27 |
[데이터 수집] 메타코드M '웹 크롤링 기초 강의' #1 - 크롤링 필수 이론 (0) | 2024.03.26 |