본문 바로가기
Python

[Python] - 크롤링 과정에서 발생하는 IP 차단 문제 사전 해결

by nam_ji 2025. 3. 4.

크롤링 과정에서 발생하는 IP 차단 문제 사전 해결

1. 웹 크롤링 중 차단 발생 원인

  • 웹 크롤링을 하다보면 해당 플랫폼에 너무 많은 요청 등의 이유로 IP를 차단 당하게 됩니다.
  • 이는 크롤링 시 지켜져야 하는 규칙들이 제대로 설정되지 않아서 발생하기도 합니다.
  • 대표적으로 User-Agent나 기타 파라미터가 존재하지 않거나 이상하게 설정되어 있는 요청은 웹 사이트가 Bot으로 판단하여 차단하는 경우입니다.
  • 따라서 가장 기본적으로 User-Agent를 Bot처럼 안 보이게 설정해주는 것부터 시작해야 합니다.

2. 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 주소를 자주 변경하거나, 크롤링 속도를 조절하는 등의 방법이 있습니다.

3. IP 변경

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

4. 크롤링 속도를 불규칙하게 설정

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

5. 정확한 파라미터 설정

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

6. 예외 처리

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