[BOJ] 파이썬 웹 크롤러의 403 Forbidden 에러 해결

작성:    

업데이트:

카테고리:

태그: , , ,

참고 자료

http error 403 forbidden 파이썬 해결방법


작성 목적

파이썬 웹 크롤러를 이용해 백준 문제 정보를 markdown 파일 형식으로 복사해와서 편하게 사용하고 있었는데, 어젠가 엊그제부터 Problem_title이 Nonetype이라며 Nonetype은 text attribute가 없어서 AttributeError가 발생하였다. 그 문제를 자세히 파며 data 자체를 출력도 해보고 하니 403 Forbidden 에러 때문에 http를 통한 HTML 파일 post 자체가 되지 않는 것이었다.


오류 이유

파이썬 웹 크롤러를 사용하면서 request 모듈을 사용한다.(urllib.request) 그런데 이 urllib를 사용하면 서버 시큐리티가 봇을 감지해서 403 에러를 발생시키는 것이다. 보안적으로 문제가 될 수 있기 때문인 것으로 보인다.

그래서 처음에는 모듈이나 라이브러리 자체의 문제일까 해서 다른 url을 넣어 HTML 파일을 출력해보았는데 잘 받아올 수 있었다. 그래서 백준 자체적으로 어떤 보안 조치가 이루어져 잘 쓰고 있던 크롤러를 사용하지 못하게 되었다고 판단하였다.


해결 방법

response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}).text

위처럼 requests의 get() 메서드 내에 headers 옵션을 주고 위와 같이 작성하면 된다.


# 3. title
# 3.1. 문제 번호 입력
input_problem_num = input("문제 번호 입력 : ")
url = f"https://www.acmicpc.net/problem/{input_problem_num}"

# 3.2. requests pip 사용
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}).text
data = BeautifulSoup(response, 'html.parser')

나 같은 경우 response 자체가 제대로 구성되지 않았기 때문에 data 자체도 없고, data에서부터 select(select_one) 메서드로 데이터를 가져오는 과정 자체가 부정된 것이었다. 위의 방법처럼 headers 옵션과 마땅한 값을 넣어준 것만으로 가볍게 해결할 수 있었다.

댓글남기기