본문 바로가기

python 시작하기

Python 웹 자동화

728x90

자 저번에는 열려있는 페이지에서 필요한 부분을 가져오는 정적 크롤링을 진행 하였습니다.

이번에는 로그인부터 검색까지 진행하여 원하는 정보의 크롤링을 할 수 있는 동적 크롤링을 같이 공부해봅시다!!.

웹 자동화란

  • 사람이 일반적으로 웹브라우저를 사용하여 수행하는 직업을 자동으로 수행할 수 있도록 도와주는 기술
  • 웹 자동화를 통해 시간을 절약하고 반복적이고 지루한 작업을 자동화하여 생산성을 향상싴킬 수 있다.
    • 웹 개발, 데이터 수집, 테스트 자동화

동적 정적 크롤링

정적 크롤링

  • 웹 페이지의 소스 코드에 표시된 정적 데이터(정해진 데이터)만을 수집
  • html 소스에서 원하는 데이터를 추출하는 것을 말함
  • javascript로 생성되는 데이터는 수집 불가

동적 크롤링

  • javascript와 같은 동적 콘텐츠를 실행하고 해당 데이터를 가져오는 방식
  • 입력, 출력, 로그인, 페이지 생성 등을 통해 데이터가 바뀐느 것을 동적 데이터라고 함
  • 정적 크롤링보다 느림

저번에는 Beautifulsoup모듈을 사용하여 정적 크롤링을 하였으니, 이번에는 다른 모듈이 등장 하겠죠?

바로 Selenium이라는 모듈을 사용합니다.

Selenium 

  • 웹 애플리케이션의 테스트를 자동화하거나, 웹 사이트에서 데이터를 스크랩하는 데 사용되는 파이썬 라이브러리
  • 실제 사용자가 웹 브라우저를 조작하는 것과 유사한 방식으로 웹 페이지의 요소 클릭, 텍스트 입력, 페이지 간 이동을 수행하며, 결과를 확인할 수 있음
  • 동적으로 HTML이 생성되는 경우에는 requests를 사용할 수 없다.
    • 스크롤 했을 때 데이터가 생성되는 경우
    • URL 주소는 동일한데 데이터가 변하는 경우

설치

selenium 설치 : pip install selenium

만약 설치되어 있으시다면

pip install --upgrade selenium (업그레이드)

공통 : pip install webdriver_manager

selenium을 실행하려면 사용하려는 브라우저에 대한 드라이버가 필요함으로, webdriver_manager을 같이 다운 받는 것입니다. 일단 우리는 크롬을 기반으로 동적 크롤링을 할 것입니다.

다른 브라우저를 이용하신다면 그 브라우저에 맞는 파이썬 드라이버 컨트롤을 검색하여 적용하셔야 합니다.

selenium을 사용하기 앞서 항상 사용해야하는 코드를 공유해 드리겠습니다.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("html 주소")

 

그럼 이제 간단하게 브라우저를 열고 닫아 봅시다.

먼저 아래에 모듈들을 import해주세요

  • from selenium import webdriver
  • from webdriver_manager.chrome import ChromeDriverManager
  • from selenium.webdriver.chrome.service import Service
  • (엣지는 다른 모듈을 사용합니다.)

그후 ChromeDriver 자동 설치 및 설정

service(변경가능) = Service(ChromeDriverManager().install())

driver(변경가능) = webdriver.Chrome(service = service) 

웹 페이지 열기

driver.get("사이트 주소")

input("닫기 입력: ") # 현재는 input이 없을 경우 사이트가 열리자 마자 닫힙니다.

그럼 이제 구글을 열어 봅시다.

?<에시>

신기하죠? 이제 selenium에 관련된 메서드와 웹요소 찾는 법을 배운뒤 git-hub에 버튼 한번으로 로그인을 하고 프로필 정보를 가지고 오는 실습을 진행해 봅시다.

Selenium 메서드

from selenium.webdriver.common.by import By

  • 웹 요소 찾기
    • find_element(by, value) : 지정된 위치에서 첫 번째 요소를 찾음
    • find_elements(bt, value) : 지정된 위치에서 모든 요소를 리스트로 변환
  • By.ID : ID로 요소 찾기
  • By.NAME : name 속성으로 찾기
  • By.CLASS_NAME : 클래스 이름으로 찾기
  • By.TAG_NAME : 태그 이름으로 찾기
  • By.CSS_SELECTOR : CSS 선택자로 찾기
  • By.XPATH : XPath로 찾기

 

여기서 가~~~~~장 많이 사용되는 요소가 바로 send_keys(keys) 입니다.

그만큼 키값도 많습니다.

하지만 그 키값도 이제 모듈에서 불러와야 합니다.

from selenium.webdriver.common.keys import Keys

 

그럼 이제 브라우저로 들어가는 방법 까지 공부하였습니다.

그런데 이제 크롤링을 하다보면 코드가 굉장히 길어집니다. 그러다가 어느새 현재 위치 주소가 변경되어 있고 또 title이 어떤것으로 바뀌어 있을수도 있고 핸들 ID가 필요할 수도 있습니다.

이럴때 필요한 것이 브라우저 상태 메서드라는 것이 또 있습니다.

 

그럼 여기까지 해서 한번 실습을 진행해 볼까요?

실습(구글에 강아지 검색하기)

- 구글을 코드를 통해서 활성화 시킵니다.

- search_input이라는 변수에 검색창 요소를 저장합니다.

- search_input에 "강아지"라는 검색어를 입력시킵니다.

- ENTER값을 보내어 검색합니다.

 

 

어???? 못보던 코드가 있지 않나요?

이제 우리가 브라우저를 컨트롤 하다보면 시크릿 모드, 최대화 최소화, 백그라운드 작동등등 여러가지 기능이 있습니다.

이런 옵션들을 컨트롤 할수 있도록 해주는 기능을 사용한것입니다.

브라우저마다 가능한 옵션이 다르니 꼭 브라우저 확인해 주셔야합니다. 옵션은 그때 그때 원하는 옵션을 직접 찾아 쓰는 것이 좋습니다.

 

개인적으로 자주쓰는 옵션

  • --start--maximized : 브라우저를 최대화된 상태로 실행
  • --window-size=weidth,height : 브라우저 크기를 지정(예 : --window-size = 720, 480)
  • --disable-notifications : 알림 창 비활성화
  • --incognito : 시크릿 모드 실행
  • --disable-extensions : 확장 프로그램 비활성화

자자자 우리 이번에도 지루한 여정이었겠지만, 끝까지 오셨습니다. 같이 와주셔서 감사합니다.

아까 말했듯이 오늘의 과제는

 

과제(git hub에 로그인 하여 자신의 닉네임 가져오기)

입니다. 이번에는 따로 알려 드릴게 없습니다. 어떤 방법을 쓰셔도 되기 때문입니다.

그러니 해답예시를 하루코딩에 올려 놓을테지만, 최대한 자신의 힘만으로 해보시길 바랍니다.!!!

오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!

728x90

'python 시작하기' 카테고리의 다른 글

python Pandas  (2) 2024.12.15
Python Numpy  (4) 2024.12.14
Python 예외 처리  (0) 2024.12.11
Python 파일입출력  (0) 2024.12.07
python 모듈  (4) 2024.12.06