[Py-Stairs] Step.3~4 마감 뉴스 Reader
들어가기 전
Step.3부터 파란만장한 실패 연대기가 시작된다.
내가 채워야할 부분이 무엇인지, 확실하게 발전하려면 어떤 공부를 해야하는지를
알아갈 수 있는 시간이었기에 아주 좌절하진 않았으나...유쾌하지만은 않은 Step들이다.
설정
그동안은 사용자에게 정보를 받아 처리하는 프로그램만을 짜왔다.
오늘은 그 방식에서 벗어나, 외부에서 스스로 정보를 가져와 처리하는 프로그램을 짜보고 싶었다.
나는 계획을 중요시 여긴다. 더 효율적으로 살기 위한 방법을 고민하다가
일주일 전부터 여러 루틴을 세웠고, 이 생활방식이 나와 매우 잘 맞는다는 것을 알게 되었다.
여러 루틴 중 돈의 흐름을 읽는 습관이라는 책을 참고해 세운 경제 루틴이 있다.
아침에 5가지 경제 지표를 확인하고, 뉴욕마감 기사를 읽고 저녁 7시에 마감시황 뉴스를 읽는 것이 그 내용이다.
이 루틴을 지켜갈 때 불편사항이 있었다.
마감 기사들을 네이버를 통해 확인하는데, 네이버앱을 사용하지 않으니
네이버 경제 기사를 읽기 위해 거치는 과정 '크롬 -> 네이버 -> 기사 검색'이 생각보다 귀찮았다.
크게 거슬리진 않았지만, 번거롭긴 했다.
그리고 각 루틴 시간에 맞춰 핸드폰 알람을 설정해놓았는데,
밖에서 알람이 울리면 “아ㅎ 알람 소리야.” 하고 설명하고 끄는 과정 또한 귀찮았다.
그래서 이 두 가지 번거로움을 해결해주고 경제 루틴을 더 원활하게 지킬 수 있게 해주는 프로그램을 짜기로 결정했다.
Step.3 마감 뉴스 Reader
Step.3로는 마감 뉴스 내용을 시간에 맞춰 복사해서 내 컴퓨터에 저장해주는 프로그램을 짜려 시도했다.
주제를 정하기 전, '파이썬과 외부와의 연결'이라는 내 머릿 속 개념을 명확하게 하고자 구글링을 했다.
구글링을 통해 라이브러리 중 urllib가 웹에게 응답을 요청하고 반응하는 모듈을 가지고 있음을 알게 되었다.
또 urllib.request 모듈의 상위호환이라는 requests 라이브러리와, 같이 추천되는 beautifulsoup4를 알게 되어 세 라이브러리를 모두 설치했다.
먼저 네이버 메인 페이지를 읽어들이는 코드가 공유되어 있어 돌려보았다.
import urllib.request
url = 'https://naver.com'
def req(url):
res = urllib.request.urlopen(url)
byte_data = res.read()
text_data = byte_data.decode('utf-8')
return text_data
webpage=req(url)
print(webpage)
그 후 네이버 경제 뉴스 페이지를 읽어들이려 시도해보았다.
이때부터 미친 Error 천국이 시작된다.
Remote end closed connection without response
url을 바꾸자, Remote end closed connection without response 에러가 떴다.
이게 뭔가 싶어서 에러를 복사해 검색해보았다.
구글링 결과, 내 파이썬 코드를 봇으로 인식해 서버의 봇 탐지에 걸려서 연결이 거부되는 것이란 사실을 알게 되었다.
이와 함께 웹 크롤링이란 개념도 언뜻 함께 알게되었다.
웹 크롤링을 위해서 봇 탐지를 피하는 것이 필수적인 듯 했다.
(이때 웹 크롤링에 대해 깊게 탐구하지 않고, 내 프로그램에 필요한 내용만 얻으려 했다.)
탐지 우회를 위해서는 먼저 봇이 아닌 사용자라면 읽을 수 없는 코드를 읽지 않아야 하고, 팝업 버튼을 눌러 처리하는 등 인간처럼 정보를 수집하는 기능을 수행해야 한다고 한다.
그런 동적 우회를 위한 Selenium 라이브러리가 존재한다는 사실을 알게 되었다.
셀레니움을 설치하고, 셀레니움 동작을 위해 필요하다는 크롬 드라이버를 설치했다.
SyntaxError: (unicode error)
from selenium import webdriver
cpath = 'C:\Users\gram\anaconda3\envs\py_seung_env\chromedriver_win32\chromedriver_win32.exe'
driver = webdriver.Chrome(cpath)
이 코드를 실행하자 SyntaxError: (unicode error) 에러가 났다.
크롬 드라이버 경로의 \는 유니코드에 해당하는 특수문자기 때문에 생기는 에러라고 한다.
\를 / 혹은 \\로 변경하거나, 경로 앞에 r(raw string이라는 의미)을 붙여 특수문자를 읽어들이지 않도록 하는 것이 해결 방법이었다.
from selenium import webdriver
cpath = r'C:\Users\gram\anaconda3\envs\py_seung_env\chromedriver_win32\chromedriver_win32.exe'
driver = webdriver.Chrome(cpath)
경로 앞에 r을 추가하고 다시 코드를 실행해보았다.
이번엔 또 다른 에러가 발생했다.
'chromedriver_win32.exe' executable needs to be in PATH.
selenium.common.exceptions.WebDriverException: Message: 'chromedriver_win32.exe' executable needs to be in PATH.라는 문구와 함께 코드가 실행되지 않았다.
코드가 내 크롬 드라이버의 경로를 찾지 못하는 듯 했다.
에러 내용으로 구글링을 해보았고 크롬 드라이버 재설치, 드라이버 경로 변경(프로젝트 파일과 같은 경로 저장 / 파이참 파일과 같은 경로에 저장 등) 등 여러 방법을 알게 되어 반복해서 시도해보았지만 에러를 해결하지 못했다.
이미 여러 에러로 시간을 많이 쓴 상황이었기에 지쳐 있었다.
다른 일정을 위해선 더 이상 시간과 에너지를 쓸 수 없었다.
결국 이 날 답을 찾는 것에 실패했다.
다음 날
어제 Step.3를 포기로 마무리한 것이 찜찜했다.
결국 Step.4로 어제의 프로젝트를 이어가기로 결정했다.
어제 구글링을 통해 여러 번 들어갔던 링크(https://edu.goorm.io/qna/6065)에서, 어제는 보지 못했던 정보를 얻었다.
어제는 눈에 들어오지 않았던 위의 문장을 보게 되었다.
아마 반복되는 에러로 에너지를 꽤 소진한 상태여서 시야가 좁아졌던 듯 하다. (텍스트 읽을 힘이 딸렸나 봄...)
6월 말에 딥러닝 공부를 깔짝하기 위해, anaconda를 설치했었다.
그 후 Step.0 개발 환경 구축 과정에서 파이참을 설치하고, 아무런 조치는 취하지 않고 과정을 이어가고 있었다.
아나콘다 파이참 경로 충돌에 대해 검색해보았다.
아나콘다와 파이참
구글링을 통해, 아나콘다와 파이참에 대한 자세한 내용을 찾아 보았다.
https://hyunlee103.tistory.com/58 에 '가상환경 충돌' 개념과, 이를 해결하기 위해 아나콘다 가상환경을 파이참 인터프리터로 지정해주는 과정이 설명되어 있었다.
링크의 설명을 따라 아나콘다 가상환경을 생성해 인터프리터로 설정해주었다.
Step.0에서의 미숙함으로 발생한 필연적 오류였다는 사실에 경탄하며, '그래 좋은 과정이었다.' 생각하며 코드를 다시 실행해보았다.
그러나 에러가 해결되지 않았다.
웹 크롤링
이제는 오류 해결을 위해 무엇을 찾아보아야 하는지조차 알 수 없는 상황에 봉착했다.
어제와 똑같은 과정을 반복해보았지만, 해결될 리가 없었다.
그러다 어제 의문을 갖지 않고 넘겼던 웹 크롤링 개념이 떠올랐다.
웹 크롤링에 대해 탐구하다 보면 뭔가 해결책을 찾을 수 있지 않을까, 싶은 생각이 들었다.
웹 크롤링을 검색하자 상위에 Velog 게시글이 떴다.
https://velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I
(이를 통해 Velog를 처음 알게 되었다.)
위 게시글을 통해 유익한 정보를 얻었다.
우선 내가 만드려는 프로그램은 웹 크롤러라고는 할 수 없는 아주 작은 프로그램이다.
그리고 알고리즘에 대한 수준 있는 탐구를 수행하지 않으면, 앞으로 프로젝트가 진행될 수록 발생할 수많은 문제를 해결할 능력을 갖추지 못할 것이다.
나의 얕음
내겐 더 수준 높은 탐구가 필수적이었다.
위 게시글을 통해 나의 '얕음'에 대한 인지를 명확히 할 수 있었다.
나는 이 깊고 넓은 세계에 좀 더 진지한 태도로 뛰어들 필요가 있다.
결론
결국 에러는 해결하지 못했고, 마감 뉴스 Reader 프로젝트는 (현재로서는) 실패했다.
하지만 이 과정을 통해 남은 프로젝트에 내가 어떤 자세로 임해야 하는지, 또 무슨 공부를 해야하는지 알게 되었다.
오늘의 성공: 에러 천국, 모르는 용어 천국, Velog, 메타인지
오늘의 실패: 에러 천국, 프로젝트 마무리 실패
참고했던 링크들
https://noodle-dev.tistory.com/41
https://www.python2.net/questions-707830.htm
https://greeksharifa.github.io/references/2020/10/30/python-selenium-usage/#install
https://l0o02.github.io/2018/06/12/python-crawling-selenium-1/
https://nanchachaa.tistory.com/18
https://haloaround.tistory.com/215
https://hyunlee103.tistory.com/58
https://velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I
https://lyb1495.tistory.com/17
https://www.google.com/intl/ko/search/howsearchworks/crawling-indexing/
Author And Source
이 문제에 관하여([Py-Stairs] Step.3~4 마감 뉴스 Reader), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kim_sw/Py-Stairs-Step.34-마감-뉴스-Reader저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)