본문 바로가기

파이썬

파이썬 requests 모듈로 웹사이트 상태 코드 확인하기

이번에는 파이썬의 requests 모듈을 사용해 웹사이트의 상태 코드를 확인하는 방법을 배워보자. 웹사이트가 정상적으로 응답하는지 확인하는 것은 매우 중요하다. 이를 위해 requests 모듈의 get 함수를 사용할 것이다.

URL 수정 및 준비

먼저, URL 리스트를 수정해서 https://로 시작하도록 만든 후, 각 웹사이트에 요청을 보낸다.

from requests import get

websites = (
  "google.com",
  "airbnb.com",
  "https://twitter.com",
  "facebook.com"
)

for website in websites:
  if not website.startswith("https://"):
    website = f"https://{website}"
  response = get(website)
  print(response)

 

이 코드를 실행하면 <Response [200]>와 같은 결과가 나온다. 여기서 200은 웹사이트가 성공적으로 응답했다는 의미이다.

 

HTTP 상태 코드란?

인터넷은 HTTP 프로토콜에 기반하고 있다. 컴퓨터들이 서로 소통하는 방식은 HTTP 요청(request)과 응답(response)이다. 웹사이트가 요청에 어떻게 응답했는지 알 수 있는 방법 중 하나가 바로 HTTP 상태 코드이다.

예를 들면 

  • 200: 요청이 성공적으로 처리되었다.
  • 404: 요청한 페이지를 찾을 수 없다.
  • 500: 서버에 오류가 발생했다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

 

상태 코드 확인

GET 함수로 요청을 보내면 응답(response) 객체가 반환된다. 반환된 객체에는 100, 200 과 같은 http 상태 코드가 포함되어 있다. 만약 string 이 포함된 <Response [200]> 코드가 출력되는게 싫고 , 200 만 깔끔하게 출력되길 원한다면  response.status_code를 사용하면 된다.

from requests import get

websites = (
  "google.com",
  "airbnb.com",
  "https://twitter.com",
  "facebook.com"
)

for website in websites:
  if not website.startswith("https://"):
    website = f"https://{website}"
  response = get(website)
  print(response.status_code)

 

이 코드를 실행하면 각 웹사이트의 상태 코드가 출력된다.

 

이제 상태 코드가 200이면 "OK", 그렇지 않으면 "Fail"이라고 출력하도록 해보자.

from requests import get

websites = (
  "google.com",
  "airbnb.com",
  "https://twitter.com",
  "facebook.com"
)

for website in websites:
  if not website.startswith("https://"):
    website = f"https://{website}"
  response = get(website)
  if response.status_code == 200:
    print(f"{website} is OK")
  else:
    print(f"{website} is not OK")

 

마지막으로, 각 웹사이트의 상태 결과를 딕셔너리에 저장해보자.

from requests import get

websites = (
  "google.com",
  "airbnb.com",
  "https://twitter.com",
  "facebook.com"
)

results = {}

for website in websites:
  if not website.startswith("https://"):
    website = f"https://{website}"
  response = get(website)
  if response.status_code == 200:
    results[website] = "OK"
  else:
    results[website] = "Fail"

print(results)

 

이 코드를 실행하면 다음과 같은 결과가 출력된다:

 

마지막으로 http 상태 코드는 200 뿐만 아니라 다양한 코드들이 있다. 다양한 상태 값을 나타낼 수 있도록, 

코드를 나누어 작성해보았다. 

 

from requests import get 

websites = (
  "google.com",
  "airbnb.com",
  "https://twitter.com",
  "facebook.com"
)

results = {}  

for website in websites:
  if not website.startswith("https://"):
    website = f"https://{website}"
  response = get(website)
  if response.status_code < 200:
      results[website] = "Information Only"
  elif response.status_code < 300:
      results[website] = "OK"
  elif response.status_code < 400:
      results[website] = "redirection"
  elif response.status_code < 500:
      results[website] = "Client Error"
  elif response.status_code < 600:
      results[website] = "Server error"
  else:
      results[website] = "Failed"

  print(results)