글

라벨이 Selenium인 게시물 표시

14. Python Selenium으로 브라우저 자동화하기 — 동적 웹 페이지 크롤링 완벽 가이드

이미지
처음에는 requests와 BeautifulSoup 조합만으로도 웬만한 페이지는 다 긁어올 수 있어서 크롤링이 정말 쉽다고 생각했어요. 그러다 어느 날, 평소처럼 코드를 돌렸는데 아무리 해도 빈 화면이나 에러 메시지만 출력되더라고요. 브라우저 창에는 뻔히 보이는 데이터가 왜 안 가져와지나 한참을 헤맸죠. 알고 보니 그 사이트가 리액트로 전면 개편되면서 데이터를 JavaScript로 동적 로딩하게 바뀐 거였습니다. 서버에서 받아온 초기 HTML에는 정말로 아무것도 없었던 거죠. 그때 처음으로 화면을 직접 제어해야겠다는 필요성을 느끼고 Selenium을 공부하기 시작했습니다. 이 글에서는 Selenium이 정확히 어떤 상황에서 필요한지, 설치와 기본 설정 방법, 브라우저를 코드로 제어하는 핵심 명령어, 그리고 실전 자동화 예제까지 단계별로 안내해 드리겠습니다. Selenium이 필요한 이유 — requests가 못 하는 것 이전 글에서 배운 requests + BeautifulSoup 조합은 서버가 HTML을 통째로 내려주는 정적 페이지 에서는 잘 동작합니다. 하지만 현대 웹사이트의 상당수는 다릅니다. 페이지를 열면 처음엔 빈 화면이었다가, JavaScript가 실행되면서 데이터가 채워지는 방식입니다. 로그인 후에만 보이는 페이지, 스크롤을 내려야 나타나는 콘텐츠, 버튼을 클릭해야 펼쳐지는 메뉴 — 이 모든 것이 requests 로는 가져올 수 없습니다. HTML을 요청하는 순간엔 아직 데이터가 없기 때문입니다. 비유하자면 이렇습니다. requests 는 식당에 전화로 메뉴판을 팩스로 보내달라 고 요청하는 것입니다. Selenium은 직접 식당에 찾아가서 자리에 앉고, 메뉴를 펼치고, 음식을 주문하는 것 입니다. 실제 손님처럼 브라우저를 조작하기 때문에 JavaScript가 실행된 이후의 완성된 페이지를 그대로 가져올 수 있습니다. Selenium이 적합한 상황 로그인이 필요한 페이지의 데이터 수집 JavaScript로 동...

13.Python으로 웹 크롤링하기 — requests와 BeautifulSoup 입문 가이드

이미지
처음엔 저도 여러분처럼 필요한 데이터를 모으기 위해 수많은 웹사이트를 클릭하며 일일이 복사했습니다. 하지만 반복되는 단순 업무에 지쳐 자동화를 결심했고, 크롤링을 배운 후에는 수백, 수천 개의 데이터를 단 몇 초 만에 수집할 수 있게 되었습니다. 그때의 경험을 바탕으로, 여러분이 겪고 계신 불필요한 시간 낭비를 확실하게 줄여드리겠습니다 이 글에서는 웹 크롤링의 기본 원리부터 requests 로 웹 페이지를 가져오고 BeautifulSoup 으로 원하는 데이터를 추출하는 방법, 그리고 실제로 데이터를 CSV로 저장하는 실전 예제까지 단계별로 안내해 드리겠습니다. 웹 크롤링이란 무엇인가 — 도서관 사서 비유로 이해하기 웹 크롤링(Web Crawling)은 프로그램이 자동으로 웹 페이지에 접속해서 필요한 정보를 수집하는 기술입니다. 비유하자면 도서관 사서 와 같습니다. 내가 직접 책장 사이를 돌아다니며 필요한 책을 찾는 대신, 사서에게 "경제학 관련 책 목록을 전부 뽑아줘"라고 부탁하면 사서가 알아서 정리해 가져다주는 것입니다. 웹 크롤러는 그 사서 역할을 Python 코드로 구현한 것입니다. 웹 스크래핑 vs 웹 크롤링 두 용어가 혼용되지만 엄밀히는 다릅니다. 웹 크롤링 : 여러 페이지를 자동으로 이동하며 링크를 따라다니는 행위 (구글 봇이 하는 일) 웹 스크래핑 : 특정 페이지에서 원하는 데이터만 추출하는 행위 이 글에서 다루는 것은 실질적으로 스크래핑 에 가깝지만, 실무에서는 두 용어를 구분 없이 '크롤링'으로 통칭하는 경우가 많습니다. 크롤링 전 반드시 확인해야 할 사항 ⚠️ 크롤링은 강력한 도구인 만큼 사용에 주의가 필요합니다. robots.txt 확인 : 사이트 주소 뒤에 /robots.txt 를 붙이면 해당 사이트가 크롤링을 허용하는 범위를 확인할 수 있습니다. 이용약관 확인 : 일부 사이트는 자동 수집을 명시적으로 금지합니다. 과도한 요청 금지 : 짧은 시간에 너...