Weekly Learned - L택배 크롤링하기

쇼핑몰 사이트를 운영하다보니 다들 계약한 택배사가 달라서 여러 택배사의 배송완료 플래그를 받아야 할 경우가 있습니다.

그런데 L 택배가 H택배를 인수 후 시스템을 대대적으로 개편을 했는지 정상적으로 크롤링이 안되는 경우가 발생 했습니다.

몇시간의 삽질끝에 대충 원리를 알게 됐습니다.

POST로 요청을 함 -> 서버에서 데이터를 가져옴(클라이언트에서는 1초 대기) -> 가져온 값을 보여줌(1회성)

즉, 다이렉트로 결과 URL에 요청을 하면 안되고 먼저 첫번째 URL에 요청을 하고 서버에서 불러올 시간을 준 뒤 다음 가져온값을 보여줍니다.

약 서버에서 불러올 시간은 평균적으로 1.5초정도 되는 것으로 예상이 됐는데, 여기저기 뺑뺑이 돌릴 경우를 감안하면 3초정도 대기텀을 주면 될 것 같습니다.

요청시 파라미터는 두개가 필요하며 첫번째 POST 요청 시 택배번호와 action의 “~~~submit”이라는 변수가 필요합니다.(고정값)

대기 후 action이 “linksubmit”으로 변경되서 요청을 주면 됩니다.

대충 의사코드로 짜면 다음과 같이 적용하면 되겠죠.

1
2
3
4
5
6
7
8
9
10
11
12
JAVA 기준

jsoup.post('REST URL형식의 요청 URL')
.data('택배번호변수','실제번호')
.data('action','~~~submit');

//대기
Thread.sleep(1000 * 3);

jsoup.post('REST URL형식의 요청 URL') //URL 변경 X
.data('택배번호변수','실제번호')
.data('action','~~~linksubmit') //요부분만 강제로 변경

이런식으로 코드를 작성하면 정상적으로 불러올 수 있을겁니다.