본문 바로가기

웹크롤링

파이썬 Selenium 새로고침하는 방법 작업을 하다 보면 페이지 새로고침을 해야 할 때가 있습니다. 파이썬 Selenium에서 새로고침을 하는 세 가지 방법을 알아보겠습니다. refresh 메서드 메서드의 이름 그대로 새로고침을 실행합니다. 제일 간단한 방법입니다. driver.refresh() get 메서드 get 메서드에 현재 페이지 주소를 인자로 넣어주는 방법으로 새로고침을 할 수 있습니다. driver.get(driver.current_url) excute_script 메서드 해당 메서드를 사용하면 자바스크립트(JavaScript) 코드를 실행시킬 수 있습니다. 인자로 자바스크립트 코드를 전달합니다. 자바스크립트에는 주소와 관련된 location이라는 객체가 있습니다. 이 객체의 메서드를 사용하면 새로고침을 할 수 있습니다. drive.. 더보기
파이썬 크롤링 BeautifulSoup select, select_one 태그 속성 100% 활용하기 BeatutifulSoup을 이용할 때 CSS 선택자를 이용하면 원하는 태그를 손쉽게 찾을 수 있습니다. ID와 CLASS 값이 있는 경우라면 더 쉽습니다. 그런데 사실 태그의 속성에는 아이디와 클래스 이외에도 활용하면 더 도움이 되는 값들이 많이 있습니다. 찾고자 하는 태그의 속성 값을 조회하면 특정 요소를 집어내는 것이 더 명확할 테니까요. 이번 포스팅에서는 select, select_one 메서드에 태그 속성 값을 함께 넣어서 원하는 태그를 찾는 방법을 알아보겠습니다. 예시로 사용할 soup 객체를 만들겠습니다. from bs4 import BeautifulSoup html = """ """ soup = BeautifulSoup(html) 속성(attribute)의 값이 특정 값과 정확히 일치하는 .. 더보기
파이썬 Selenium을 이용해서 특정 요소의 부모 요소 선택하기 파이썬 셀레니움을 이용해서 웹사이트를 제어하는 일을 생각해보면, 바로바로 내가 원하는 요소를 동작시켜서 일을 끝마치면 될 것 같습니다. 대개의 경우에는 이렇게 특정 요소를 바로 직접적으로 찾아들어가면 더 편하고 빠르게 작업을 할 수 있겠지만, 그렇지 못한 경우가 있습니다. 이럴 경우 내가 원하는 요소를 지정하기 위해서 그 요소의 더 위에서부터 타고 내려오던가, 아니면 밑에서부터 거꾸로 올라가는 방법을 생각해 볼 수 있습니다. 어떤 방법이 되었던 id나 class를 이용해서 명확하게 기준을 삼을 수 있는 부분이 있는 방법을 사용하면 되겠죠. 무슨 방법이든 결과만 똑같다면 방법 선택은 개인의 취향 차이라고 생각합니다. 위에서부터 선택해서 내려가는 방법이야 기본적으로 여러 가지 방법이 널리 알려져 있으니 이번.. 더보기
파이썬 웹크롤링 iframe 페이지 Selenium으로 처리하는 방법 파이썬에서 Selenium을 이용해서 웹크롤링을 한다면 대개 다음과 같은 코드를 씁니다. # 라이브러리 불러오기 from selenium import webdriver from selenium.webdriver.common.keys import Keys from bs4 import BeautifulSoup # 특정 웹페이지에 접근하기 driver = webdriver.Chrome() driver.get("웹페이지 주소") driver.implicitly_wait(10) # HTML 코드 가져오기 r = driver.page_source # 파싱 soup = BeautifulSoup(r, "html.parser") # 이후 데이터 수집 작업 대부분의 웹페이지는 이것으로 충분합니다. 하지만 만약 지금 내가 .. 더보기
파이썬 Selenium ActionChains를 사용해서 웹사이트 자동 제어하기 ActionChains 기능을 사용하면 여러 개의 동작을 체인으로 묶어서 저장하고 실행할 수 있습니다. 마우스 이동, 클릭, 키보드 누름과 같은 기본 동작 이외에도, 마우스 커서를 특정 위치에 올려놓거나, 드래그 앤 드롭과 같은 복잡한 동작도 가능합니다. 많이 쓰이는 기본 동작 동작 코드 element로 마우스 이동 ActionChains(driver).move_to_element(ref) element 마우스 클릭 ActionChains(driver).click(ref) element 키보드 입력 ActionChains(driver).send_keys_to_element(ref, keys) 키보드 입력 ActionChains(driver).send_keys(keys) 위와 같은 동작들을 체인으로 묶어서.. 더보기
[파이썬 웹크롤링] selenium이 좋은 이유, 셀레니움은 왜 도움이 되나 웹크롤링을 하다 보면 여러 가지 어려운 상황을 마주치게 됩니다. 대표적인 상황은 다음과 같습니다. - 해당 웹사이트가 프로그램을 통한 접근 허용하지 않는 경우 - 해당 웹사이트가 로그인을 요구하는 경우 - 해당 웹사이트가 동적 웹페이지로 구성되어 있는 경우 이런 경우에는 requests 라이브러리만으로 해결하기에는 쉽지 않습니다. 이럴 때 상황을 해결하는 가장 손쉽고 효과적인 방법이 바로 selenium을 이용하는 것입니다. 셀레니움이란 selenium은 웹사이트 테스트를 위한 도구로 브라우저 동작을 자동화할 수 있습니다. 셀레니움을 이용하는 웹크롤링 방식은 바로 이점을 적극적으로 활용하는 것입니다. 프로그래밍으로 브라우저 동작을 제어해서 마치 사람이 이용하는 것 같이 웹페이지를 요청하고 응답을 받아올 .. 더보기
정적 웹페이지, 동적 웹페이지는 뭘까 이번에는 정적 웹 페이지와 동적 웹 페이지에 대해서 알아보겠습니다. 특히 웹크롤링에 관심이 있으신 분이라면 알아두면 도움이 됩니다. 정적 웹 페이지 (static web pages) 정적 웹 페이지는 언제 접속해도 같은 응답을 보내줍니다. 일단 HTML, CSS, JS 파일 등이 서버에 업로드되면 개발자가 수정하기 전까지 매번 같은 파일을 브라우저에 건네줍니다. 즉, 웹 서버가 정적 웹 페이지에 대한 요청을 받은 경우 서버는 추가적인 처리 과정 없이 클라이언트에게 응답을 보냅니다. 예를 들어 회사나 개인의 소개 페이지가 정적 웹 페이지의 좋은 예시입니다. 동적 웹 페이지 (dynamic web pages) 웹 서버가 동적 웹 페이지에 대한 요청을 받은 경우 서버는 추가적인 처리 과정 이후 클라이언트에게 .. 더보기
파이썬 Selenium 네이버 로그인 자동입력 방지(캡차) 피하기 파이썬에서 셀레니움 라이브러리를 이용하면 손쉽게 로그인이 필요한 웹사이트도 접근할 수 있습니다. 다만 종종 문제가 되는 것이 캡차(captcha)에 걸리는 경우입니다. 오랜만에 네이버를 selenium을 통해서 들어가려고 했더니 로그인 자동 입력 방지에 걸렸습니다. 방법을 찾아보니 생각보다 간단하게 해결할 수 있었습니다. 로그인 자동 입력 방지에 걸리는 방법 제목 처음에 사용했던 코드입니다. 대부분의 사람들과 마찬가지로 send_keys() 메서드를 이용하여 로그인을 시도했습니다. from selenium import webdriver import time # 크롬 브라우저를 이용해서 네이버에 접근합니다. driver = webdriver.Chrome() driver.get('https://www.nav.. 더보기