셀레니움을 사용하게 된 이유
requests로 url 접속 시 껍데기 html만 가져와 selenium 사용 (js로 데이터 전송 받아 페이지 구성하는것으로 확인)
크롭 옵션중 headless를 추가해 보았으나 실제 페이지가 열리지 않으면 js 전송이 안되는것으로 추측
크롤링 로직
이름으로 맛집 검색 (이전 단계에서 생활의 달인, 백종원의3대천왕, 풍자 등 방송 매체에 소개된 음식점들을 크롤링 해 가게명과 주소를 엑셀로 저장함)
같은 상호명의 가게들이 많이 있어 주소로 찾으려는 맛집을 필터링
찾은 맛집을 클릭해 데이터 크롤링
수집 데이터
목록 : 가게명, 주소, 카테고리, 연락처, 네이버평점, 방송정보, 영업시간, place_id, 위경도
수집된 데이터 : 11035개
Issue
구글
구글 지도의 리뷰 평점 데이터도 수집하기 위해 셀레니움으로 작업을 하였는데, 10분도 안되서 사람인지 감지하는 캡챠가 발생해 구글 API를 사용해 데이터 수집을 했는데 하루만에 API 사용료 23만원이 나왔다...
처음에 수집한 맛집 데이터가 상호명도 잘못된 것도 있고 주소도 '서울 용산구'와 같이 상세하게 있지 않아 속도가 빠른 API를 통해 검증을 하려고 했으나 사용료가 너무 많이 나와 포기
네이버 지도는 폐업한 가계는 검색이 되질 않지만 구글은 검색시 폐업이라고 정보가 나와 이를 활용하려고 했다
셀레니움 :
find로 찾은 element를 클릭하는 코드가 있는데, 클릭이 안되는 경우가 가끔 발생
클릭할 수 있을 때 까지 대기도 해보고 자바스크립트로 클릭하는 코드를 넣어봤지만 속도가 빨라서인지 안되는 경우가 있음, time.sleep으로 일정시간 멈춘 뒤 클릭을하면 클릭이 잘 되었지만 찾을 데이터가 너무 많아 속도를 포기할 수 없었다
장시간 켜두면 'invalid session id' 에러가 발생하는데 해결 방법은 찾지 못했다
async await를 이용해 비동기로 여러개의 셀레니움을 구동하면 데이터 수집이 빠를줄 알았지만 시간이 지날수록 페이지 로딩 속도가 현저히 느려짐 ( 맥북의 리소스가 부족한건지 코드의 최적화가 안되어있는지 아직은 잘 모르겠다 )
'Portfolio' 카테고리의 다른 글
네이버 블로그 리뷰 크롤링 (0) | 2024.02.01 |
---|