크롤링 전문가가 알려주는 ‘차단 우회 5가지 원칙’

웹 크롤링 하다보면 필연적으로 겪는 차단대응 방법, 주요 원인과 해결 방안

0. 웹크롤링 중 차단 발생, 원인이 뭘까?

웹크롤링을 경험해본 개발자는 무조건적으로 차단을 경험해보았을 것입니다.
내 크롤러는 완벽했는데, 어떤 부분에서 문제가 생긴건지 몰라 답답하셨나요? 이번 포스팅에서는 대표적인 차단 원인을 해법 중심으로 다루었습니다.
크롤링은 가게에 들어가서 원하는 상품을 가져오는 것과 비슷합니다. 우리는 가게에 입장할 때 지켜야 할 암묵적 규칙들이 있습니다. 예를 들면 가게를 들어갈때 신발의 흙먼지를 제거하고 들어온다거나, 우산을 잘 털어서 우산꽃이에 꽃아두거나, 상대방에게 불편함을 주지 않는 옷차림 등이 있을 것 같습니다.
또한 가게마다 사장님 만의 규칙이 있는 곳이 간혹 있습니다. 그럴때는 그 규칙을 꼭 지켜야 해당 가게를 이용할 수 있습니다. 요즘 유행하는 카페들처럼 ‘문의는 DM으로’ 해야한다거나, 음식점의 경우 트레이를 직접 반납해야 하는 경우, 또는 좌석에 놔두고 가는 경우 처럼 말이죠.
이처럼 크롤링도 지켜져야하는 규칙들이 있습니다. 대표적으로 User-Agent나 기타 파라미터가 존재하지 않거나 이상하게 설정되어있는 요청은 웹사이트가 Bot으로 판단하여 차단당하는 경우 입니다.
따라서 가장 기본적으로는 User-Agent를 Bot처럼 안보이게 설정해주는 것 부터 시작해야 합니다.
 
 

1. User-Agent를 설정해보자.

User-Agent를 설정하는 방법은 HTTP 요청 헤더에 User-Agent 값을 넣어주는 것입니다. User-Agent 값은 웹 브라우저 혹은 HTTP 클라이언트의 종류와 버전을 나타내는 문자열입니다.
예를 들어, Chrome 브라우저에서는 다음과 같은 User-Agent 값을 사용합니다.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
크롤러에서도 User-Agent 값을 설정해주면, 웹사이트에서는 해당 요청이 브라우저에서 보낸 요청이라고 판단하게 됩니다. 따라서 User-Agent 값을 설정해주지 않으면 웹사이트에서는 해당 요청이 크롤러에서 보낸 요청이라고 판단하여 차단할 가능성이 높아집니다.
User-Agent 값을 설정하는 방법은 HTTP 요청 라이브러리마다 다르지만, 일반적으로 HTTP 요청 헤더에 User-Agent 값을 넣어주는 것이 가능합니다. Python에서는 requests 라이브러리를 사용할 때 다음과 같이 User-Agent 값을 설정할 수 있습니다.
 
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get('<http://example.com>', headers=headers)
이와 같이 requests 라이브러리에서는 headers 인자를 통해 HTTP 요청 헤더에 User-Agent 값을 설정할 수 있습니다.
그러나 최근에는 User-Agent 뿐만 아니라 더욱 다양한 방법으로 크롤링 차단을 시도하는 사이트들이 늘어나고 있어서, User-Agent 설정 이외에도 다른 방법들을 함께 사용하는 것이 좋습니다. 예를 들면, IP 주소를 자주 변경하거나, 크롤링 속도를 조절하는 등의 방법이 있습니다.
 
 

2. IP 주소를 최대한, 자주 변경한다.

같은 IP주소를 가지고 계속 접속을 요청하는 것은 웹사이트가 보기에 매우 수상해 보일 수 있습니다.
IP 주소를 자주 변경하는 간편한 방법 중 하나는 VPN을 사용하는 것입니다. VPN은 Virtual Private Network의 약어로, 인터넷 연결을 통해 사용자의 IP 주소를 숨기고 다른 지역의 IP 주소로 변경하는 서비스입니다.
VPN을 사용하면 매번 IP 주소를 변경할 필요 없이, VPN을 거쳐 인터넷에 연결되는 것으로 인식되므로 차단을 받지 않을 가능성이 높아집니다. 또한, VPN을 이용하면 이전에 차단을 받았던 IP 주소를 사용하지 않아도 되므로, 크롤링을 더욱 안정적으로 수행할 수 있습니다.
 
 

3. 크롤링 속도를 불규칙하게 조절한다.

기계처럼 정확한 타이밍과 간격으로 요청할시 Bot으로 인식할 가능성이 높습니다. 따라서 크롤링속도를 일정하지 않게 조절하는 설정이 필요합니다.
크롤링 속도를 조절하는 방법은 크게 두 가지가 있습니다. 첫 번째 방법은 크롤링 요청 사이의 간격을 조절하는 것입니다. 일반적으로 짧은 간격으로 크롤링 요청을 보내면 서버에서 이를 인식하여 차단할 가능성이 높아집니다. 따라서 일정한 간격으로 크롤링 요청을 보내는 것이 좋습니다. 두 번째 방법은 다양한 IP 주소를 사용하는 것입니다.
만약 같은 IP 주소에서 계속해서 크롤링 요청을 보내면 서버에서 이를 인식하여 차단할 가능성이 높아집니다. 따라서 여러 개의 IP 주소를 사용하여 크롤링 요청을 보내는 것이 좋습니다. 이를 위해 프록시 서버를 사용할 수 있습니다.
 
 

4. 정확한 파라미터(Parameters) 설정

앞서 User-Agent를 설정할때 header를 설정해주었습니다
크롤링을 할 때, HTTP 요청 헤더에 설정해주어야 할 파라미터가 없는 경우나, 반대로 없어야 할 파라미터가 있는 경우에도 문제가 발생할 수 있습니다.
예를 들어, User-Agent 값을 설정하지 않는 경우, 일부 웹사이트에서는 브라우저에서 보낸 요청이 아닌 것으로 인식하여 차단할 수 있습니다. 또한, HTTP 요청 헤더에 포함되지 말아야 할 쿠키 값을 설정하여 보낸다면, 웹사이트에서 이를 인식하여 차단할 수 있습니다.
따라서, 크롤링을 할 때는 HTTP 요청 헤더에 설정해야 할 파라미터가 무엇인지, 또한 없어야 할 파라미터가 있는지를 꼼꼼히 확인해서 조정해주셔야 합니다.
 
 

5. 적절한 예외처리

크롤링을 하는 도중에 에러가 발생하여 동일한 요청을 지속적으로 보내면 웹사이트에서는 이를 봇으로 인식하여 차단할 가능성이 높아집니다. 따라서 적절한 예외처리를 해주어야 합니다. 예외처리란, 프로그램 실행 도중에 발생하는 예상하지 못한 상황을 대비하여 오류를 처리하는 것을 말합니다.
예를 들어, HTTP 요청을 보낼 때 서버가 응답하지 않는 경우, 요청이 실패하게 됩니다. 이 경우, 프로그램은 이를 인식하고, 일정 시간 대기 후 다시 요청을 보내도록 예외처리를 해주어야 합니다.
또한, 웹사이트에서 규칙을 어긴 크롤링 요청을 보내면, 웹사이트에서는 이를 차단하게 됩니다. 이 경우에는 예외처리를 통해 프로그램에서 이를 인식하고, 요청을 중단하도록 해주어야 합니다. 이를 위해, HTTP 요청을 보낼 때, 웹사이트에서 반환하는 상태 코드를 확인하고, 이에 따라 예외처리를 해주어야 합니다.
예외처리는 크롤링을 하는데 있어서 매우 중요한 부분입니다. 적절한 예외처리를 통해, 크롤링을 안정적으로 수행할 수 있습니다.
 
 

6. 결론

웹크롤링을 안정적으로 수행하기 위해서는 User-Agent 설정, IP 주소 변경, 크롤링 속도 불규칙화, 정확한 파라미터 설정, 그리고 적절한 예외처리 등의 다양한 방법을 사용하여 웹사이트의 차단을 피해야 합니다.
차단을 경험하시게 될 경우, 위의 5가지 원칙이 잘 반영되어있는지 점검하시어 좋은 결과를 내실 수 있기를 바랍니다.