본문 바로가기
공부/파이썬 Python

크롤링하는 Flask앱을 pythonanywhere에 호스팅하는 방법

by 혼밥맨 2023. 7. 15.
반응형

크롤링하는 Flask앱을 pythonanywhere에 호스팅하는 방법

결론부터 말하면 pythonanywhere 서버에서 크롤링을 하는 것은 한계가 있다.

 

1. pythonanywhere - Max retires exceeded with URL in requests 에러 발견

로컬 서버에서는 크롤링을 부분 담고 있는 flask 앱이 잘 작동했지만 pythonanywhere 서버에 호스팅을 했다 하면 아래와 같은 에러를 보이면서 실행 자체가 불가했다. 하지만 너무 수상했다. 호스팅을 하자 마자 크롤링 요청 수를 초과했다니 너무 수상했다. 더군다나 호스팅을 여러 번 한 것도 아니고 호스팅 시도를 하자 마자 요청 수 초과? 이상했다.

 

Max retries exceeded with URL in requests

requests.exceptions.SSLError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1125)')))

2. Max retires exceeded 에러 디버깅

디버깅을 하려고 여러 방법을 찾았다.

1) verify=false

response = requests.get("https://google.com", verify=False)

크롤링 코드를 위와 같이 수정했다. 해결이 안 됐고 호스팅을 했다 하면 동일한 에러를 보였다.

 

2) import HTTPAdapter

import Retry

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry


session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

session.get(url)

위 코드도 추가하여 호스팅을 다시 시도했다. 해결이 안 됐다.

 

3) try and exception 예외처리 추가

try:
    page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
    r.status_code = "Connection refused"

위와 같이 예외처리문도 추가했다. 해결이 안 됐다.

 

4) import OpenSSL

import OpenSSL.SSL  # or
from OpenSSL import SSL

SSL 설치도 하고 다시 호스팅했다. 계속 같은 에러를 보였다. 머리가 아파지기 시작했다. 구글에 에러를 검색했을 때 할 수 있는 거의 모든 방법은 한 것 같은데 문제를 풀 수 없었다. 더 이상한 점은 로컬에서는 잘 동작하지만 호스팅을 했다 하면 동일한 에러를 계속 보였다.

 

그런데 문제는 나의 코드에 문제가 있었던 것도 아니고 실제로 발생하는 에러가 크롤링 요청 수 초과도 아니었다. 다만 pythonanywhere 서버에서 크롤링할 수 있는 웹사이트를 whitelist로 관리하고 있었던 것이다. 

 

필자가 크롤링하려고 시도했던 웹사이트는 한국 웹사이트였는데 한국 웹사이트는 거의 없었다. 자유롭게 사용하기 위해서는 유료 구독을 해야 한다는 것이다.

 

pythonanywhere 무료 사용자는 whitelist 안에서만 이용이 가능하다... 

https://www.pythonanywhere.com/whitelist/

 

Allowlisted sites for free users: PythonAnywhere

 

www.pythonanywhere.com

 

반응형

댓글