Python - 크롤링 실패 사례 (Http 406 error) 유저 정보의 필요성

컴퓨터/Python

728x90
반응형

서론

지난 포스트에서 간단하게 음악차트를 가지고 오는 크롤링 프로그램을 구현해 보았습니다.

정상적으로 작동하는 것을 확인할 수 있었지만, 다른 웹페이지를 크롤링하기 위해서 응용을 했을 때 원하는 결과를 못 얻는 경우가 생길 수 있습니다. 

이유는 웹 서비스를 제공하는 서버 측에서 불순한 의도로 접근하는 방법을 차단하기 때문입니다.

디도스 공격등 다양한 문제점을 발생시킬 수 있기 때문이죠.

그렇기 때문에 http 요청을 할 때 어떠한 방법으로 접근을 하는지 포함하여 요청을 해야만 올바른 동작을 할 수 있습니다.

 

User-Agent - 서버에서 나의 정보를 식별하기 위한 값

Http 요청을 하게 되면 Header 부분에서 User-Agent라는 값으로 어떠한 방법으로 요청을 하고 있는지 정확하게 식별해주는 방법이 필요합니다.

이 User-Agent라는 값을 사용하지 않거나, 서버의 정책상 불순한 의도라고 생각되는 User-Agent값은 서버에서부터 원하는 정보를 제공받을 수 없습니다.

 

따라서 안전하게 크롤링을 하기 위해서는 User-Agent를 적절하게 사용해 주어야 합니다.

 

Request패키지를 통해 User-Agent를 포함한 Http 요청

위의 내용에 따라 User-Agent의 정보를 정의하고 포함된 Http요청을 서버에 할 필요성이 생겼습니다.

 

구현 코드를 통해 어떻게 포함하여 요청을 하는지 확인해 보도록 합시다.

import requests
from bs4 import BeautifulSoup

header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"}
response = requests.get("https://www.melon.com/",headers=header)

딕셔너리 형태로 User-Agent의 값을 입력해줍니다.

  • 키 - User-Agent
  • 값 - 이 부분이 어떤 방법으로 접속하는지의 표현입니다. (구글에 user-agent 확인하기로 쉽게 찾을 수 있습니다.)
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"}
response = requests.get("https://www.melon.com/",headers=header)
print(response.status_code) #200 정상적으로 크롤링 


response = requests.get("https://www.melon.com/")
print(response.status_code) #406 서버로 부터 제한을 받아 정상적인 응답을 받지 못함

 

이 방법을 알고 있으면 다양한 크롤링을 하는데 장애를 넘을 수 있습니다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :