상황
웹 스크래핑하여 데이터를 받아오는 것을 카카오톡으로 일정 시간마다 전송하기 위해 AWS Lambda를 활용하게 되었다.
카카오톡으로 전송하는 것을 테스트 하기 전, 먼저 lambda_function.py 파일에서 IDE에서 짜놓은 코드가 제대로 동작을 하는지 확인을 거치는 과정에 에러가 발생하였다.
HTTP 403 Error : url forbidden 에러 발생
Troubleshoot HTTP 403 errors from API Gateway
When I call my Amazon API Gateway API, I get a 403 error. How do I troubleshoot 403 errors from API Gateway?
repost.aws
구글링을 통해 위 링크를 찾게 되었다.
이를 통해, AWS Lambda 에서의 HTTP 403 응답 코드는 클라이언트가 유효한 URL에 액세스 하는 것이 금지되었음을 의미한다는 것을 알 수 있었다.
그래서 나는 내가 넘기고 있는 url 이 유효하지 못하다는 것을 알 수 있었고 아래와 같은 시도를 통해 정확히 문제를 파악할 수 있었다.
시도
1. 나는
어떤 부분에서 에러가 발생했는지 정확히 짚고 넘어가기 위해
코드를 간소화하기위해 한 줄씩 코드를 지우거나 간결한 코드로 수정했다.
2. 그 결과,
url ="https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=서울날씨"
이 부분에서 문제가 발생했음을 알 수 있었다.
왜냐하면 url 을 간단한 "https://www.naver.com/"로 바꿔보니 에러가 발생하지 않는 것을 발견했기 때문이다.
3. 그래서
request로 넘기는 url의 header에 표시된 검색값들(
where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=서울날씨
) 이 유효한 도메인 규격에서 벗어난 것 일 수도 있겠다 라는 가정을 하게 되었다.
4. 가정을 바탕으로 조사한 결과,
아래 링크를 통해 사용자 지정 도메인을 통해 도메인 매핑이 가능하다는 사실을 알게 되었다.
https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html
5. 하지만 나는 이를 적용하지 않았다.
그 이유는 생각해 둔 기간의 마지노선을 넘길 것 같았고
아무래도 Python 을 이용한 웹 스크래핑 기능은 흥미로 시작한 것이기 때문에 깊게 파고들 여유가 없었다.
6. 그래서 내가 선택한 방법은
url에서 요청으로 넘기는 값들을 줄여보자
였다.
서울날씨의 웹 스크래핑을 하려 했기 때문에 기본 네이버 웹사이트에서 날씨가 표시되는 부분을 발견했고 그곳으로 페이지를 넘겨가 보니, url이 생각보다 길지 않은 것을 발견할 수 있었다. (6번에 첨부된 링크가 해당 링크이다)
그래서 혹시 이것은 가능할까 싶은 마음으로 적용해보니 에러가 발생하지 않음을 확인할 수 있었다.
정확한 이유는 따로 공부해봐야 겠지만, 요청하는 값이 적거나, 간결하다면 도메인 규격에 맞다는 것을 알 수 있었다.
https://weather.naver.com/today/09545101?cpName=KMA
해결
url 에서 요청으로 넘기는 값들을 줄여보자
마무리
기존에 넘기려던 url과 비슷한 데이터가 존재하는 url을 찾음으로써 해결할 수 있었던 문제였다.
아무래도 이 글을 보는 사람은 "이게 뭐가 해결한거야" 싶을 수도 있겠다. (죄송합니다)
다음번에는 도메인을 매핑하는 방법으로 해결을 시도해보고 싶다.
나의 직무 방향성과는 조금 맞지 않아서 깊게 파고들지 않았지만 뭐든 다 배우면 도움이 되고 경험이 된다고 생각한다.
게다가 방향을 틀게 될지도 모르고 말이다.
또한, 이번 문제해결을 통해 꽤나 뿌듯함을 느꼈다.
평소 구글링을 했을 때 관련 문서가 모두 영어 뿐이라면 막막함을 느낄 때가 있다.
하지만 "한번 해보자." 라는 마음가짐을 가지고 고될 것임을 감지하고 나니
영어로 된 문서도 번역기를 통해 하나하나 접근해 나갈 수 있음을 느꼈다.
'Project > Personal & Toy' 카테고리의 다른 글
| [AWS Lambda] EventBridge 스케줄러를 활용한 카카오톡 API 메세지 전송 (0) | 2023.11.14 |
|---|---|
| [Python] 웹 스크래핑 : requests.exceptions.ConnectionError (1) | 2023.11.02 |
| [Python] 웹 스크래핑 : 같은 태그명의 정보를 가져오는 방법 (0) | 2023.11.02 |