크롤링하는 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/
'공부 > 파이썬 Python' 카테고리의 다른 글
[펌][Github] Github에 업로드하는 기본적인 방법 (0) | 2023.07.15 |
---|---|
변수명 짓는 방법 (Camel Case, Snake Case 등등 ) (0) | 2023.01.21 |
HTTPX로 웹 크롤링 10배 빠르게 하기 (1) | 2023.01.14 |
파이썬 스케줄작업 생성하기 (Python schedule) (2) | 2023.01.12 |
Python cProfile 튜토리얼! (feat. 함수 별 소요시간 파악하기) (1) | 2023.01.11 |
댓글