본문 바로가기

기능과 기술

매원환조 프로그램을 파이썬으로~ 2편 - 수정보완

728x90

안녕하세요?

매일 원달러 환율 조회 프로그램을 파이썬으로 만들어서 공유드렸는데, 역시 에러가 있었습니다. 😢

직접 실행해보시고 발생하는 에러를 알려주셔서 너무 감사드립니다.

질문이 가장 어렵다는 것을 잘 알고 있기에 더 감사한 마음이 큽니다.

그래서 이번에는 해당 오류의 원인을 찾는 방법과 해결하는 과정을 설명드리고,

추가로 질문주신 브라우저에서 해당 값을 셀렉팅하는 방법을 설명하겠습니다.

 

문제 확인

저는 잘 될 수도 있으니깐 우선 그냥 실행해봤지만 역시나 에러가 발생했습니다.

어디에서 왜 발생하는지 찾아야 합니다.

NoneType의 오브젝트는 text 속성이 없어요. 라고 알려주고 있습니다.

에러의 원인은 exchange.text 부분인데 exchangeNoneType이라서 text를 불러올 수 없다는 뜻이고,

그러면 왜 exchangeNoneType이 되었는지 살펴봐야 합니다.

그래서 printexchange를 출력해봅니다.

Exchange 값이 없고 None으로 나옵니다.

NoneType의 오브젝트는 text 속성이 없어요. 라고 알려주고 있습니다.

에러의 원인은 exchange.text 부분인데 exchangeNoneType이라서 text를 불러올 수 없다는 뜻이고,

그러면 왜 exchangeNoneType이 되었는지 살펴봐야 합니다.

그래서 printexchange를 출력해봅니다.

Exchange 값이 없고 None으로 나옵니다.

이를 통해 soup.select_one이 값을 제대로 가져오지 못하는 것을 알 수 있습니다.

왜 값을 제대로 못 갖고 오는지 확인하기 위해 네이버 환율 조회 후 현재 값을 찾아보니 경로가 아래처럼 나옵니다.

#_cs_foreigninfo > div > div.api_cs_wrap > div > div.c_rate > div.rate_bx
> div.rate_spot._rate_spot > div.rate_tlt > h3 > a > span.spt_con.dw > strong

기존 소스와 차이점이 보이시나요?!

거의 끝자락의 span.spt_con.dw 가 현재 조회되는 내용이고, 제가 드린 소스는 span.spt_con.up 으로 되어있네요.

 

문제 해결

원인을 알았으니 문제를 해결할 차례입니다.

매일 환율이 어떨지 알수 없으므로 span.spt_con.up으로 시도 후 에러나면 span.spt_con.dw로 시도하는 방법이 있습니다.

그런데 조금 더 깔끔하게 up dw 상관없이 조회할 수 있는 방법이 있습니다.

up dw을 빼버리면 됩니다. 그래서 아래와 같이 수정해줬습니다.

또한 혹시 다른 이유로 exchange 값을 못 가져올 수 있기 때문에

if문을 넣어서 exchange값이 있을 때만 파일로 저장하도록 수정했습니다.

 

그리고 다음 질문

답변을 드렸는데 정말 중요한, 크롤링의 핵심 기능에 대한 질문을 다시 주셨습니다. 👍👍👍

#_cs_foreigninfo > div > div.api_cs_wrap > div > div.c_rate > div.rate_bx
> div.rate_spot._rate_spot > div.rate_tlt > h3 > a > span.spt_con.dw > strong

바로 이 부분을 어떻게 알 수 있는가?! 였습니다.

결론은 브라우저에서 개발자 도구를 사용해서 웹 페이지의 요소를 접근 할 수 있습니다.

단축키는 F12, Ctrl + Shift + I 로 실행할 수 있고, 메뉴는 아래 스샷처럼 접근합니다. (Edge 기준)

그리고 열린 탭의 좌상단 버튼을 클릭해서 활성화하면?!

마우스로 페이지 이곳저곳을 가보면 영역이 지정되면서 선택할 수 있게 됩니다.

해당 환율을 클릭하면 열린 탭의 요소탭에서 해당 항목의 위치가 활성화됩니다.

활성화된 항목에서 우클릭한 후 복사 메뉴의 selector 복사를 클릭하면 프로그램에 입력했던 내용이 복사됩니다. 😊

이와 같은 방법으로 웹 페이지의 각각의 요소에 접근할 수 있는 정보를 얻을 수 있습니다.

 

동영상 시청

 

오늘도 고생 많으셨습니다. 불금 되셔요!!

반응형