29P by xguru 2021-11-29 | favorite | 댓글 12개

- 만약 구글검색을 수백만건씩 실행하는 서비스를 만든다면 차단 당하지 않을 대안이 필요함
- 가장 쉬운 것은 유료 프록시를 사용하는 것이지만 상당히 비싼편
ㅤ→ 그래서 필자가 시도해본 것들을 상세히 설명한 재미난 글

- 처음엔 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 이라는 놀라운? 가격

너무 비싸서 놀라운건가요? 감이 안와서요

네 엄청 비싼 거죠. 유료 프록시 쓰는등에 비해서는요.
api라 차단 우려없이 편하긴 합니다만

국내 기준으로는 데이터가 어느 정도 제공되는 0원 알뜰폰 요금제들이 생각나긴 하는데...
대량 가입이 어렵다 보니 요것도 힘들겠군요.

Google Fi의 경우는 회선 하나에 추가 데이터심 4개까지 가능하니 이런 것도 방법이긴 할 듯 합니다

예전에 naver 의 무언가를 스크래핑할 때
AWS lambda 에서는 안되고 GCP functions 에서는 되었던 기억이 있는데,
IP range 가 오픈되어있어서 그럴 것이라고 생각했는데 그렇지도 않은가보네요.

1번 방식으로 이미 하고 있어서 다른 방법들은 뭐가 있나 하고 봤는데.. 생각지도 못 했네요.

사실 1번의 Lambda+Puppeteer 도 저 방식으로 하면 괜찮긴 할거 같은데
맨뒤의 Proxidize 방법과 비교했을때는 아마도 스크래핑 규모에 따라 비용 차이가 날듯합니다.
더 대용량이 필요할수록 Proxidize가 안정적일 테지만, 간단히 하기엔 1번도 나쁘지 않을것 같아요.

마지막에 소개한 https://proxidize.com/ 이 재미나네요.
직접 4G 모바일 프록시를 만들어서 관리하게 해주는 하드웨어+소프트웨어 솔루션 입니다.
5개 동글 버전이 $399 네요. 사용자들 국가리스트에 한국도 있는거 봐서는 사용은 가능할듯 ?

CGNAT 까지는 아니자만, 소프트웨어 프록시를 풀로 관리하는 Scrapoxy 같은 솔루션도 있습니다.
- Scrapoxy - 웹크롤러용 프록시 풀 관리도구 https://news.hada.io/topic?id=2308