본문 바로가기

코딩/파이썬(Python)

[파이썬] 파이썬으로 알리익스프레스(aliexpress) 상품 스크래핑(크롤링)

반응형

파이썬으로 알리익스프레스(aliexpress) 상품 스크래핑(크롤링) 도전

 

예전부터 알리익스프레스 상품 정보를 긁어와 달라고 부탁하는 분들이 많이 계셔서 가끔 작업을 하고는 했는데, 매번 할때마다 항상 작업 난이도는 최상급이었던 듯 하다. 알리익스프레스는 크롤링 방지를 위한 솔루션을 계속 고도화시키고 있는 것이 분명하다. 때문에 알리익스프레스를 크롤링할 수 있다면 그 사람의 실력은 거의 검증된 것으로 봐도 무방할 듯 하다.

 

아무튼 각설하고, 이번에는 순전히 재미로 크롤링에 도전해 보았다. 실력 점검 차원이기도 하고, 그동안 알리익스프레스의 기술이 얼마나 발전했는지 궁금하기도 했다.

 

Selenium으로 크롤링 시도

우선은 가장 쉬운 selenium을 통한 자동화. 처음 몇번은 성공했지만, 3~4번부터는 막히기 시작. 봇 확인 창이 뜨기 시작한다.

 

 

그리고 처음에 몇번 접속이 되더라도, 상품 세부 정보를 selenium에서 읽어오지를 못한다. element에 대한 접근이 안되는데, 어떤 방법으로 이를 막았는지 파악이 어렵다. (확인하기 위해서 몇번 시도하는 도중에 차단이 되버림)

 

Http Requests로 크롤링

알리익스프레스 CPU 카테고리의 상품 리스트와 관련해서 Fiddler로 성공한 http 요청을 복사해서 python으로 다시 요청하니, 내용을 가져오지 못한다. Fiddler에서 WebView로 확인해보니 내용이 비어있다.

그렇다면 ajax를 통해서 동적으로 데이터를 받아왔다는 의미인데, Fiddler에서는 ajax를 통해 상품 데이터를 받아온 내역이 보이질 않는다. 

 

그래서 Raw 탭으로 소스를 까보니 궁금즘이 해결이 됐다. 처음 상품카테고리 페이지에서는 javascript 변수에 json 형식으로 그대로 넣어주고 이를 javascript를 통해서 화면에 뿌려주고 있었다.

 

때문에 selenium에서도 이를 긁어오지 못한 것이다. (일정시간 time.sleep을 하거나 화면에 뿌려진 상품 정보 element가 확인 될때까지 기다리는 방법으로 해결 가능할 듯 하다.)

 

이후 페이지에 대해서는 ajax로 화면에 뿌려준다. Fiddler에서도 관련 json 수신 기록이 확인된다. 아무래도 알리익스프레스 화면 개발자가 기본적으로 javascript로 화면에 뿌려주되, 첫페이지는 ajax가 아니라 html에 그대로 넣어주는 방법으로 처리한 듯 하다. 

 

크롤링 결과

 

Http Request 변조 테스트

이제 본격적인 크롤링을 위해서 http request를 일부 변형해보았다. page부터 카테고리까지. 예전과 마찬가지로 알리익스프레스는 Cookie 값과 Referer를 체크하고 있어서, request header에 Cookie와 Referer를 넣지 않으면 결과값을 받아오질 못한다. 

 

문제는 Cookie값을 넣게 되면 사용자 Session에 대한 추적이 가능해지므로, 한동안 크롤링이 되다가 곧 차단이 될 가능성이 크다. 예전 경험으로는 4~5개 페이지, 50~60개 상품 정보를 조회하고 나면 차단이 되었다. 그리고 Cookie 값을 변경하더라도 ip가 추적이 가능하기 때문에 해당 ip에 대한 차단이 되는 경우도 있다.

 

그렇다면, 크롤링을 위한 방법은?

단순하다. 위에서 언급한 것을 해결하면 된다. ip를 주기적으로 변경하고 새로운 Session을 생성해서 Cookie 값을 가져오면 된다. 올바른 Cookie 값을 가져오기 위해서는 가능하면 브라우저를 실행해서 알리익스프레스에 접속하는 것이 좋고, 이후에는 그 Cookie 값을 활용하되, Referer는 계속하여 변경할 필요가 있다. 

 

하지만 말이 쉽지, 당연히 실제로 이를 자동화하기는 어렵다. 이를 최소한의 비용으로 효율적으로 해결하는 것이 아마 가장 큰 중요한 부분일 것으로 보인다. (느리고 비용이 많이 든다면, 차라리 알바를 고용해서 하나하나 긁도록 하는 것이 낫지 않을까)

 

[UPDATE] 2020.9.24.

카테고리별, 검색어별 상품 목록 스크래핑(최대 3600개) 및 상품 상세페이지 대량 크롤링 성공

(샘플 데이터)

 

프로그램 관련 문의 카카오톡 오픈채팅으로 연락 부탁드립니다.

카카오톡 오픈채팅

반응형