삼성전자 이재용 부회장의 영장실질심사가 2020년 6월 8일에 있었습니다.
이 날짜를 전 후로 '이재용'으로 검색하면 블로그에서 어떤 키워드가 많이 나올까 궁금했습니다.
그래서 관련된 글들을 네이버 블로그에서 크롤링해보고자 합니다.
* python code : ★one[셀레늄] 네이버블로그_이재용_영장심사전.ipynb Go to file
우선 개발 환경을 확인해보면,
윈도우에서 작업하였고, 사용한 파이썬 버전은 3.6.5입니다.
그리고 필요한 라이브러리와 모듈을 임포트 합니다.
이 중 중요한 라이브러리는 다음과 같습니다.
- pandas : 데이터분석
- numpy : 행렬 연산
- selenium : 웹 브라우저 자동화
- tqdm : for문 작업할 때 %게이지를 시각화해줘서 진행상황 파악
네이버에서 이재용을 검색하고 블로그 카테고리를 선택한 다음, 검색기간을 넣는 코드를 살펴보겠습니다.
input으로 검색어 및 검색기간을 변수에 입력받습니다.
- 검색 키워드 : 이재용
- 검색 시작 날짜 : 20200601
- 검색 종료 날짜 : 20200607
영장심사 전 1주일기간을 검색기간으로 넣어보겠습니다
검색어 변수 세팅이 끝났으니 이제 셀레늄으로 크롬창을 띄워서 크롤링을 진행해보겠습니다.
네이버 크롬 창이 띄워진 후 이재용의 검색어가 들어가고, 블로그 카테고리가 선택된 화면을 볼 수 있습니다.
검색 결과는 관련도순, 최신순 두 가지의 옵션으로 정렬할 수 있습니다. 관련도순으로 하겠습니다.
이제 위에서 세팅해둔 검색기간 변수를 크롬 창에 넣어보겠습니다.
날짜를 입력할 때 한번에 넣으면 글자가 엉키는 경우가 있습니다.
이럴 때는 위에서 사용한 방법처럼 for문으로 한 글자씩 넣어주면 그런 에러가 나지 않습니다.
코드를 실행하면 기간설정 란에 자동적으로 20200601, 20200607 가 한 글자씩 입력되는 모습을 볼 수 있습니다.
크롤링 전략은 다음과 같습니다.
1. 검색 결과 블로그 각각의 페이지에 있는 글들의 URL을 수집
2. 수집된 URL 각각 접속해서 제목, 내용 등 크롤링
먼저 URL을 수집한 후, 그 URL로 접속해서 블로그 글들을 크롤링하는 것입니다.
이것은 네이버 카페를 크롤링할 때도 썼던 방법인데요,
먼저 각각의 집주소를 알아낸 다음 그 집주소에 각각 방문해서 데이터를 가져오는 방식이므로,
크롬 드라이버가 서버 통신 문제로 에러가 날 일이 거의 없는 방법입니다.
수집되는 과정동안 블로그 제목(title)을 프린트하도록 설정하였습니다.
테스트로 10 page까지만 할 것인데, 네이버 블로그 특성상 한 페이지마다 10개의 블로그가 있으므로,
최종적으로는 총 100개의 블로그 글을 크롤링하게 될 것입니다.
자 이제 집 주소들을 알아냈으니(url 수집 완료) 본격적으로 블로그 글들을 크롤링해 보겠습니다.
저장한 url 엑셀 파일을 다시 로드합니다.
수집하는 데이터는 제목, 글쓴이, 날짜, 내용 입니다.
url로 각각의 블로그를 접속하는 크롬 창을 띄웠다가 데이터 수집 후 창을 닫습니다.
그리고 또 다음 url로 접속해서 데이터를 수집하는 과정을 반복합니다.
파이썬을 할 때 제일 중요하게 생각하는 부분이 리스트와 딕셔너리입니다. 왜냐하면 그 두가지 데이터 저장소를 이용해서 결국 데이터를 담고, 판다스로 변환한 후 데이터 분석을 하는 과정이 이어지기 때문입니다.
여기서도 target_info라는 중간 딕셔너리에 가각의 블로그 글들을 담습니다. 그리고 이렇게 수집된 블로그들은 dict라는 전체 딕셔너리에 담겨지게 됩니다.
여기서 사소하지만 중요한 부분은 글 수집 후 driver.close() 메소드를 사용해서 크롬 드라이버 창을 닫아줘야 한다는 것입니다. 안 그러면 크롤링을 할 때마다 크롬 창이 열리게 되고 최종적으로는 100개의 크롬 창이 화면에서 깜박거리고 있을 수도 있습니다.
마지막으로 예외처리와 저장에 대해 살펴보겠습니다.
네이버 블로그 특성상 수많은 외부 사이트로 링크가 연결되어 있습니다.
그래서 네이버 블로그 포멧과 맞지 않은 사이트의 경우 셀레늄이 정상적으로 크롤링을 하지 못합니다.
이 때 예외처리를 걸어주어서 에러가 나면 현재 크롬창을 닫고 다음 url 주소로 크롬 창을 띄우게 합니다.
100개의 글을 크롤링했지만 실제로 수집된 것은 70개였습니다. 30%의 글들은 네이버 외부 사이트의 것으로 유추할 수 있습니다.
그리고 중간 중간 저장을 해두면 마음이 편안해집니다.
위 코드에서는 30, 50, 80 단위로 반복문을 돌 때 저장하도록 세팅해두었습니다.
그러면 만약 에러가 났을 때 수집된 위치 다음부터 크롤링을 진행할 수 있습니다.
그래서 최종적으로 크롤링 결과는 엑셀 파일로 저장되게 됩니다.
이렇게 네이버 블로그 크롤링에 대해 알아보았습니다.
이제 수집된 데이터를 가지고 어떻게 분석할지에 대해 고민해야 할 시간이 왔습니다.
이 부분은 아마도 텍스트 마이닝 카테고리에서 다루게 되지 않을까 싶네요.