대규모로 웹 스크래핑하기
(incolumitas.com)- 만약 구글검색을 수백만건씩 실행하는 서비스를 만든다면 차단 당하지 않을 대안이 필요함
- 가장 쉬운 것은 유료 프록시를 사용하는 것이지만 상당히 비싼편
ㅤ→ 그래서 필자가 시도해본 것들을 상세히 설명한 재미난 글
- 처음엔 AWS Lambda + Puppeteer를 사용
ㅤ→ AWS가 전세계 16개 리전을 제공하고, 3번 Lambda를 실행하면 새 IP가 지정됨
ㅤ→ 동시에 1000개의 람다를 실행하면 약 250개의 퍼블릭 IP를 사용하게 됨
ㅤ→ 16개 리전 * 250 이면 4000개의 IP주소이고, 이정도면 주간 백만단위의 구글 검색을 수행하는데 충분
ㅤ→ GCP에서도 써봤는데, 웃긴게 구글이 자신의 클라우드 IP를 더 공격적으로 차단함 (AWS와 비교해서)
ㅤ→ 2019~2020년 사이 얘기고 변했을 수 있음
- 이 방법은 구글/빙/아마존 등을 스크래핑 하는데는 사용 가능 하지만 한계가 있음
ㅤ→ DataDome, Akamai, Imperva 같은 안티 봇 회사를 이용한다면 적용 불가
ㅤ→ 굉장히 다양한 방식으로 브라우저 핑거프린팅을 통해서 봇인지를 식별해 냄
ㅤ→ 구글 Picasso, Font/TLS/WebGL Fingerprinting..
ㅤ→ 사실 대부분의 대규모 Scraping 서비스는 클라우드 + 도커 컨테이너들 을 사용하기에 식별하기에 쉬움
- 감지하기 어렵고 확장 가능한 스크래핑 인프라
ㅤ→ 성공적으로 스크래핑 하기 위한 두가지 법칙
ㅤㅤ1. 브라우저 설정을 속이지 않기
ㅤㅤ2. 가장 중요한 것은 "아무도 눈치 채지 못할 경우에만" 브라우저 설정을 속일 것
ㅤ→ 이를 위해서는 그냥 "실제 디바이스를 사용"하는게 가장 좋다는 결론
ㅤㅤ⇨ 500대의 싼 안드로이드 기기를 제조사 여러곳에서 구입하고, 저렴한 데이터 플랜을 가입
ㅤㅤ⇨ 여러 도시에 분산 (안테나 가까운 곳에)
ㅤㅤ⇨ DeviceFarmer/stf 같은 오픈소스를 활용해서 기기를 동시에 컨트롤
ㅤㅤ⇨ Android Go 같은 경량OS를 설치하고, 5분마다 에어플레인모드로 들어가게 해서 계속 새로운 IP주소를 획득
ㅤㅤ⇨ "4G carrier grade NAT" : 4G 캐리어급 NAT는 IPv4 주소 고갈을 막기 위해 고안된 방식으로 IP를 수십만이 공유하기 때문에 차단이 불가능
ㅤ→ 500대의 안드로이드 기기를 사야 하고, 설치 장소가 필요하고, 하드웨어 유지보수 해야 하는 등 귀찮은 점이 많음
- 개선 : 안드로이드를 Emulate
ㅤ→ 안드로이드 기기를 사는 대신, Android-X8, Bluestacks, Android Studio Emulator 등을 이용하면 ?
ㅤ→ Proxidize 는 4G 모바일 프록시를 만들 수 있게 함
ㅤ→ 서버 한대에 50개의 4G 동글을 설치
ㅤ→ 각 서버에서 50~100개의 안드로이드 기기를 에뮬레이트
ㅤ→ 이 스테이션을 5개 도시에 설치
ㅤ→ 단단한 코맨드로 이 스테이션들을 관리
- 봇 감지 우회하기 : 차단당하지 않고 웹 스크레핑 하는 법 https://news.hada.io/topic?id=5304
프록시, 스크래핑 서비스, 안티봇 소프트웨어 등은 위 글에 잘 정리되어 있습니다.
https://www.diffbot.com/products/crawl/
crawling해서 webpage scraping 해주는 서비스도 있습니다. scraping한 데이터는 불필요한 정보는 제외하고 json으로 저장하고 있습니다.
전혀 다른 얘기지만..
구글 검색을 API화 해서 파는 https://serpapi.com/ 같은 데도.. 있습니다.
근데 여기는 네이버 검색도 API 화 해서 같이 팔아요 ㅎㅎ
https://serpapi.com/naver-search-api
월 3만번 검색에 $250 이라는 놀라운? 가격
국내 기준으로는 데이터가 어느 정도 제공되는 0원 알뜰폰 요금제들이 생각나긴 하는데...
대량 가입이 어렵다 보니 요것도 힘들겠군요.
예전에 naver 의 무언가를 스크래핑할 때
AWS lambda 에서는 안되고 GCP functions 에서는 되었던 기억이 있는데,
IP range 가 오픈되어있어서 그럴 것이라고 생각했는데 그렇지도 않은가보네요.
사실 1번의 Lambda+Puppeteer 도 저 방식으로 하면 괜찮긴 할거 같은데
맨뒤의 Proxidize 방법과 비교했을때는 아마도 스크래핑 규모에 따라 비용 차이가 날듯합니다.
더 대용량이 필요할수록 Proxidize가 안정적일 테지만, 간단히 하기엔 1번도 나쁘지 않을것 같아요.
마지막에 소개한 https://proxidize.com/ 이 재미나네요.
직접 4G 모바일 프록시를 만들어서 관리하게 해주는 하드웨어+소프트웨어 솔루션 입니다.
5개 동글 버전이 $399 네요. 사용자들 국가리스트에 한국도 있는거 봐서는 사용은 가능할듯 ?
CGNAT 까지는 아니자만, 소프트웨어 프록시를 풀로 관리하는 Scrapoxy 같은 솔루션도 있습니다.
- Scrapoxy - 웹크롤러용 프록시 풀 관리도구 https://news.hada.io/topic?id=2308