본문 바로가기
[파이썬으로 웹스크래핑] 에러? 또 에러?! 셀레니움으로 막힘 없이 스크랩하기 내가 앞에서 쓴 글, 혹은 다른 곳에서 셀레니움을 동작하는 방법을 익힌 분들이 셀레니움이 특정 페이지에서 요소를 못찾거나 하는 이유로 프로그램 자체가 정지해버려 다시 처음부터 자료를 쌓아야 했다거나, 그런 오류(예외)를 막기 위해 try: except: 구문을 남발했더니 코드가 지저분해졌다-하는 이의제기를 해주셔서 글을 작성해본다. 첫번째, 보통 만나게 되는 오류들 브라우저 드라이버를 자유롭게 다루는 셀레니움은 그 기능만큼이나 다양한 오류를 개발자에게 가져온다. 그 중 "웹스크래핑"을 시도하는 개발자에게 자주 보이는 오류들을 선정해본다. (전체 익셉션은 여기에) NoSuchElementException - "예? 그런 엘리먼트(태그) 없는데요?" 에러 ElementNotSelectableException.. 2021. 9. 4.
웹개발의 봄, 스프링 5주차 (최저가셀렉샵) [스파르타코딩클럽] 5주차는 지금까지 만든 나만의 셀렉샵 사이트와 스프링부트 서버를 아마존 AWS와 가비아 도메인을 통해 배포하는 내용이었다. 1. 아마존 RDS 구매하고 MySQL 세팅하기 2. html 웹페이지 메타 OG 태그 작업하기 3. 아마존 서버 EC2 구매하기 4. 도메인 구매 및 연결, EC2 셋팅하고 배포하기 AWS EC2란? 아마존 엘라스틱 컴퓨트 클라우드(Amazon Elastic Compute Cloud, EC2)는 아마존닷컴의 클라우드 컴퓨팅 플랫폼 아마존 웹 서비스의 중앙부를 이루며, 사용자가 가상 컴퓨터를 임대 받아 그 위에 자신만의 컴퓨터 애플리케이션들을 실행할 수 있게 합니다. EC2는 사용자가 아마존 머신 이미지(AMI)로 부팅하여 아마존이 “인스턴스”라 부르는 가상 머신을, 원하는 소프트웨.. 2021. 8. 19.
웹개발의 봄, 스프링 4주차 (최저가셀렉샵) [스파르타코딩클럽] 4주차에도 새로운 개념들을 많이 배웠다. 나만의 셀렉샵이라는 이름의 미니 프로젝트를 만들어보는 시간이었는데, 간단한 프로젝트지만 스프링의 중요한 요소들을 많이 다뤄주신 것 같아 정리 꼼꼼히 해둘 생각. 1. 3계층 아키텍처 어플리케이션을 3개의 논리적·물리적 컴퓨팅 계층으로 분리 구성하는 잘 정립된 소프트웨어 어플리케이션! (출처 IBM) 이 3개의 계층이란 프리젠테이션(클라이언트) 계층(JS,HTML,GUI 등 프론트엔드), 애플리케이션 계층(미들웨어, API), 데이터 계층(DBMS)으로 나눠지는데, 프리젠테이션 계층에서는 데이터 계층과 직접적으로 통신할 수 없고, 모든 통신은 애플리케이션 계층을 통과한다. 즉, 아래와 같은 형식으로 프로그램이 작동하는 모습인데, 적절한 분업을 통해 각각의 계층들이 .. 2021. 8. 18.
웹개발의 봄, 스프링 3주차 (24시간뉴스피드) [스파르타코딩클럽] 이번 주차는 메모의 CRUD를 구현하고 그것을 웹에 구현해, 24시간이 지나면 게시물(메모)이 저절로 사라지는 서비스를 만들었다. 스파르타코딩클럽의 왕초보시작반(웹개발 종합반1)을 들었던 사람이라면 내용이 파이썬의 Flask를 이용하는 것에서 자바의 Spring을 이용하는 것으로 바뀌었다고 생각하면 될 것 같다. 그래서 어떻게 보면 아는 사람한테는 별거 아닌 주차였고, HTML/CSS/JAVASCRIPT에 대한 기본기가 부족한 분들은 3주차가 의외로 길고 힘든 여정이 되었을 수도 있을 것 같다. 스프링 프레임워크는 RestController라는 것을 제공하는데 이게 진짜 편리하게 Get,Post,Put,Delete를 맵핑하는 어노테이션을 제공한다. 이...이게 다라고? 싶을 만큼 개발자는 크게 할 일이 .. 2021. 8. 16.
웹개발의 봄, 스프링 2주차 (내머리터짐) [스파르타코딩클럽] 이번주는 정말 아무것도 아닌 듯이 많은 개념을 배웠다 여기서 하나하나 정리를 해야 내꺼가 될 듯해서 여기에 정리를 좀 해봐야겠다. JPA: Java의 언어로 번역된 SQL 쿼리라고 생각하면 될 것 같다. 이를테면 H2(서버가 종료되면 데이터 역시 함께 휘발하는 간단한 SQL 도구)에 직접적으로 SQL문을 작성할 필요없이 리포지토리에 새로운 Person 인스턴스를 저장하면 INSERT INTO PERSON... 과 같은 SQL쿼리문으로 번역되어 실행, 해당 데이터가 데이터베이스에 저장된다. Repository: 데이터베이스(SQL DB)와 상응하는 클래스, 자바 안에서는 interface 형태로 구현하고 JpaRepository를 상속받아 사용한다. @Service: 아직 정확하게 "왜" 쓰는지는 잘 모르.. 2021. 8. 15.
웹개발의 봄, 스프링 1주차 (+자바) [스파르타코딩클럽] 리액트 수업을 마치고 호기롭게 시작한 자바, 파이썬과 자바스크립트 다음으로 사랑받는(?) 언어이기도 하고, 리액트네이티브로 앱을 만들 때도 작성은 모던 자바스크립트의 언어로 리액트네이티브라는 틀에 맞게 써냈지만 마지막에 빌드할 때에는 결국 자바, 그래들 같은 것들이 숨어있다가 나타나는 모습을 보고 언젠가는 자바를 배워야 할 거라고, 배우게 될 거라고 생각해왔는데 마침 좋은 기회(미니튜터라는 좋은 기회를 주신 황선애 매니저님 압도적 감사..!!)가 생겨 자바 스프링 강의를 스파르타코딩클럽을 통해 들을 수 있게 되었다. 불과 올해 3월까지만 하더라도, 프로그래밍 언어와 프레임워크 같은 개념도 모르고, 프로그래밍 언어에 어떤 것이 있는지도 몰라서, 자바와 자바스크립트가 비슷한 애들인 줄 알았던 (개발자들은 자.. 2021. 8. 12.
[파이썬으로 웹스크래핑] 셀레니움 기능탐구(2) 기다려! 대기하기 앞서 실행한 스크래핑 코드들을 보면, 프로그래밍한 코드가 동작할 때 사람의 눈보다 훨씬 빠르게 데이터를 읽어오기 때문에, 페이지가 데이터를 불러오기도 전에 당장 눈 앞에 보이는 껍데기 html 구조만 가져오거나 하는 참사가 발생할 수 있었습니다. 혹은 엘리먼트를 선택하려고 하는데 아직 그 엘리먼트가 클릭가능한 상태가 아닌데 클릭하려고 해서 에러가 발생하고 드라이버가 종료될 수도 있지요. 자 이 부분을 어떻게 해결하면 좋을지 고민해 봅시다. 1. 파이썬 내장 모듈 time 사용하기 가장 간단한(무식한) 방법이지만 성능은 확실한 친구입니다. sleep()이라는 간단한 메소드를 사용할 수 있는데, 괄호 안에 파라미터로 숫자를 넘기면, n초 동안 아무 동작을 하지 않고 기다립니다. 셀레니움 외에도 어떤 코드를 .. 2021. 8. 11.
[파이썬으로 웹스크래핑] 셀레니움 기능탐구(1) 요소찾기 자꾸 뭔가 좀 설명하려다가 코드 하나 가져와서 참 쉽죠?를 반복하니까 아는 사람만 재미있게 보고 깜깜이인 초보자 분들은 힘들 수도 있겠다는 생각이 들어 핵심적인 기능 소개를 몇가지 해보고자 합니다ㅎㅎ 한번 들어봐주세요. 셀레니움은 웹드라이버를 조작하는 라이브러리입니다. 사실 셀레니움은 웹스크래핑만을 위해 개발되어진게 아니고 그것이 주목적도 아닙니다. 오히려 웹개발 과정에서 가상의 유저의 행동을 만들어내 그 유저가 정해진 행동을 하도록 만들어내는 게 주목적에 더 가까운 것 같습니다. 제가 만든 로그인 페이지에 셀레니움이 회원가입을 하고, 아이디와 비밀번호를 기입해 로그인하고 사이트를 사용하는 과정을 지켜보면서 "아 여기서 이게 펼쳐지면 안되는군","아 이 부분이 대기시간이 긴 편이네" 할 수 있는 것이지요.. 2021. 8. 11.
[파이썬으로 웹스크래핑] 가슴이 웅장해지는 셀레니움을 araboja.. 꺄꿍 지난 번에 requests와 BeautifulSoup을 사용해 보면서, 웹이 처음으로 html으로 나타날때 requests를 get해 오는 특성 탓에, 여러가지로 부족한 스크래퍼를 만들 수 밖에 없었죠? 결과물이야 나쁘지 않았지만, 각 탭에서 초기에 나타나는 8개의 글만 스크랩해오고 스크롤을 내려야 나타나는 게시물을 못 가져온다던지, 그런 문제들 말이죠..!! 자 문제점을 파악했으니 어떻게 해결하면 좋을까요? 스크롤을 해야겠죠? 그런데 requsets는 브라우저를 실제로 띄우는 것도 아니다 보니 직접 스크롤을 해주기도 힘들어 보입니다. 여러분이 스크랩하고 싶은 어떤 사이트는, 자세히 보기 혹은 더보기 버튼을 눌러야 모든 게시물이 보일 수도 있고, 아니면 로그인을 해야만 볼 수 있는 게시물이 있을 수.. 2021. 8. 10.
[파이썬으로 웹스크래핑] 뷰티풀숲, 오오 아름다운 수프여! 앞선 글에서 제대로 다루지는 않았지만, 대부분의 웹사이트의 데이터는 그것을 제작한 회사의 고유 저작물입니다. 이것을 스크랩하고 사용, 특히 영리적으로 이용하는 것은 법적인 책임을 각오해야 할 가능성이 있음을 미리 밝힙니다. 이것을 방지하기 위해서는 해당 도메인의 robots.txt를 참고하는 것이 좋습니다. 가장 상위 도메인 (예: blog.naver.com이 아닌 www.naver.com) 확인 필수. 이걸 어기면 당장 쇠고랑 차고 어떻게 되는 것은 아닌데, 네이버의 경우 십몇년 전에 일본 진출 과정에서 네이버봇이 robots.txt를 무시하는 크롤러를 사용한 이유로 시장에서 퇴출되다시피 했었던 전례가 있습니다. 윤리적인 문제라고 해두죠. 저도 제 컨텐츠를 무단복사(불펌)하는 것은 싫고 대부분 사람들이.. 2021. 8. 10.
[파이썬으로 웹스크래핑] 스크랩핑? 크롤링? 그게 뭘까? 파이썬에는 웹에 있는 데이터를 긁어올 때 쓸 수 있는 다양한 라이브러리/모듈/패키지(엄연히 다른 개념이지만 차이점을 다루지는 않을 것이고, 여기서는 라이브러리로 통일할 예정이다.)가 존재한다. 그래서 파이썬 크롤링/스크래핑을 구글링 해보면 다양한 글이 많다. 그런데 막상 관련된 책을 사보려고 하면 찾아보기 힘들다. 왜 그런 것일까? 또 어떻게 시작하면 좋을까? 1. 크롤링이 뭔데? 크롤링은 단어 그대로는 Crawl, 기어가다라는 뜻이다. 철권 같은 대전게임에서 상대방의 공격을 물흐르듯 피하기 위해 낙법을 사용해 구르는 것도 크롤링이라고 부르고, 군인이 철조망 등을 통과하기 위해 낮은 포복으로 기어가는 것, 수영장에서 보통 "자유형"하면 떠올리는 영법의 이름도 크롤이다(다리를 퍼덕이면서 물살을 손으로 빠르.. 2021. 8. 9.
[개인프로젝트] 나만의앱만들기 고양이사료디비 앱 나름의 앱 기획을 만들어보았다. 개인적으로 유사한 앱 중에서 가장 마음에 든 것은 퍼플스토어의 UI였어서 헤더 부분과 디테일 페이지의 구성요소를 참고했다. 아무래도 이 프로젝트에서 가장 중요한 것은 양질의 데이터 수집이 될 것 같다. 웹스크래핑 기술은 충분할 만큼 익혔다고 생각이 들지만 아직 코드를 짜는게 능숙하지 않아 데이터의 분석 및 처리 작업에 애를 먹지 않을까. 앱개발 종합반에서 나름 로그인 기능 등을 구현한 괜찮은 앱을 만..들기는 했지만 사실상 강의에서 배운 프레임을 거의 그대로 사용한 것이었고, 이번엔 내 나름의 색을 입힌 UI와 기능들을 구현해보아야겠다. 가능한 한 컴포넌트들은 재사용 가능하게 해서 로그인페이지/회원가입/마이페이지는 거의 유사한 구성으로 구현하게 될 것 같고, 여러가지의 기.. 2021. 8. 3.