requests.exceptions.ConnectionError 발생
웹 스크래핑 프로젝트에서 헤드라인 뉴스를 가져오는 도중, requests.exceptions.ConnectionError 가 발생하였다.
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
처음 보는 에러를 보고, 항상 생각하는 것은 영어 좀 해둘걸 이다.
그래도 어느 정도 알고 있던 지식을 기반으로 해석을 해보니(물론 우리에겐 파파고가 있지만)
요청 연결에서 에러가 발생했다는 의미 같았다.
Connection aborted.
연결이 중단되었다는 뜻으로, Remote(원격)과의 연결이 중단되었다는 뜻으로 해석을 했다.
그래서 이 프로젝트를 진행하기 전 user agent라는 것에 대해 배웠는데 이것을 통해서 해결하면 될 것 같았다.
간단하게 user agent 에 대해서 설명하자면,
HTTP 요청을 보내는 디바이스와 브라우저 등 사용자 소프트웨어의 식별정보를 담고 있는 request header의 한 종류로
우리의 user agent 를 고정값으로 넘겨주게 되면 같은 사용자로 인식하여 차단하지 않는다.
정리하자면,
에러 원인
해당 웹사이트를 계속 요청해서, 원격으로 반복적인 요청을 차단함으로써 발생한 에러.
문제 해결 방법
원격의 차단을 막기 위해 user agent 값을 url 값 넘길 때, 헤더로 같이 넘기면 된다.
그래서 어떻게 user agent 값을 알 수 있는가?
What is my user agent?
Every request your web browser makes includes your User Agent; find out what your browser is sending and what this identifies your system as.
www.whatismybrowser.com
위 페이지 링크에 들어가면
해당 사진과 같은 부분이 본인의 user agent 값이다.
그래서 나는 아래와 같이 코드 작성을 해서 해결할 수 있었다.
# 이처럼 user_agent 값을 변수명에 담아준 뒤
headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"}
# url 을 넘길 때 headers 값으로 위의 변수명인 headers 를 넘기면 해결된다.
res = requests.get(url, headers=headers)
이제야 에러가 안 나고 잘 불러와지는 것을 확인할 수 있었다.
이제 카카오톡으로 해당 데이터들을 전송하는 방법을 공부해보려 한다.

(내적 기쁨)
'Project > Personal & Toy' 카테고리의 다른 글
[AWS Lambda] EventBridge 스케줄러를 활용한 카카오톡 API 메세지 전송 (0) | 2023.11.14 |
---|---|
[AWS Lambda] HTTP 403 Error : url forbidden 문제 해결 (1) | 2023.11.14 |
[Python] 웹 스크래핑 : 같은 태그명의 정보를 가져오는 방법 (0) | 2023.11.02 |