현재 Google에서 동작하는 Crawler을 제작 중인데
계속 reCAPTCHA에 막혀 고생..
혹시 다음에도 Crawler를 만들 수도 있을까 하는 생각에
간략한 해결 방안과 노력의 여정을 남기는..
기존 방법
reCAPTCHA를 최대한 발생시키지 않게 하기위한 노력들
첫번째 방법
Crawler제작 시 단순 thread.sleep이나, 파싱하는 페이지 별로 텀을 주고
페이지 내부에서도 클릭과 같은 요청 시에도 텀을 줬다.
결과 : 7일 정도 Crawler가 지속되다가 reCAPTCHA가 발생하였으며, 그 뒤로는 3~4시간에 한번꼴로 발생.
두번째 방법
첫번째 방법은 텀을 ms단위의 절대값으로 계속 입력했었다 (ex) 1200000ms
random 알고리즘을 간단하게 만들어서 적용시킴
1. 텀의 범위 설정
2. 텀을 나눌 기준을 정해 배열 생성
3. 기준 IDX 방문 시 IDX 재방문하지 않고 다른 랜덤 텀을 발생
4. 모든 IDX방문 시 초기화
5. 반복
결과 : 1번과 비슷하지만, 며칠 내내 지속되거나 하진 않았음.
세번째 방법
NIC를 여러 개 서버에 추가하여 reCAPTCHA상황 시 NIC switching
NIC마다마다 NIC gateway, reCAPTCHA 발생 time을 Key, Value로 사용하여 reCAPTCHA 발생 시 24시간이 지나면 재구동 가능상태로 update.
문제점
결국 여러 개의 NIC가 있더라도 전부 정지가되면.....
여러 개의 NIC여도 결국 reCAPTCHA가 NIC들의 규칙을 찾아서 기억하고 있다가 reCAPTCHA발생 주기가 짧아질 것 같다.
결과 : Crawler는 완성하였으며, 구동 중. 결과 업데이트 예정
문제 인식
★데이터 수집 시간이 너무 오래걸림★
방안
( ※ 프록시는 고려하지 않음 )
1. serp api 사용
위 사이트는 Google Search API를 제공하는 SerpApi임
Crawling 예산(?)을 따로 설정하지 않았기 때문에 최후의 보루로 생각
2. Buster(Captcha Solver for Humans) 확장 프로그램 사용
Selenium에서 정확하게 iframe 형태의 체크버튼을 클릭할 수 있는지
(iframe display=none 형태였던 것 같음)
또한 저 사람모양을 클릭할 수 있는지 체크해봐야 할 것 같다.
Chrome
https://chrome.google.com/webstore/detail/buster-captcha-solver-for/mpbjkejclgfgadiemmefgebjfooflfhl
Firefox
https://addons.mozilla.org/en-US/firefox/addon/buster-captcha-solver/
3. 여러 대의 EC2 사용 및 AutoScaling
대형 사이트를 대상으로 데이터 수집 시 IP차단의 기능들이 다양하게 구현해 놓음.. 웹 서버에서 우리의 IP를 기억하고 있어서 자주 막힌다.
좋은 해결책이 없나 계속 찾아보다가 AutoScaling이라는 것을 찾게 되었음
해당 과정을 통해 해결하게 될 경우 공부한 내용들과 적용시킨 코드를 풀어내며 상세하게 기록할 예정이며 따로 포스팅 할 예정이다.
대형 웹 사이트를 Crawling하는 Crawler는 어떻게 동작하는지 찾아보다가 발견한 자료들
https://www.megazone.com/techblog_221027/
https://docs.aws.amazon.com/ko_kr/glue/latest/dg/crawler-running.html
https://docs.aws.amazon.com/ko_kr/glue/latest/dg/crawler-s3-event-notifications.html
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!