2024 SWLUG/파이썬 프로젝트 - 크롤러

웹크롤링(2)

un_plugged 2024. 5. 22. 14:17

▶동적 웹크롤링 - selenium

  1. Selenium 패키지

크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생하는데 컴퓨터가 그런 행동을 대신 할 수 있도록 해주는 패키지

설치 방법

VS CODE 터미널 창에 위의 코드 입력

설치 완료!

2. 사용 방법

① 관련 패키지 import

② 크롬 드라이버 실행

크롬 드라이버는 컴퓨터가 크롬 웹 브라우저를 다룰 수 있도록 해주는 프로그램으로 구글에서 제공해준다. (별도 다운로드 필요X)

이렇게 입력하면 크롬 드라이버로 구글 웹페이지가 열린다.

▶selenium으로 화면 조작

① 조작을 원하는 버튼이나 입력창의 html 파악

② 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

  • find_element(By.ID)
  • find_element(By.CLASS_NAME)
  • find_element(By.XPATH)
  • find_element(By.CSS_SELECTOR)

③ 기능 동작 관련 함수로 원하는 기능 조작

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

<예시>

Step 1. 원하는 버튼의 html 타겟팅

크롬 실행 -> 개발자 도구 -> 검색창 부분 클릭 -> 개발자 도구에 검색창의 html 부분이 나타남 -> class 속성값 부분을 더블클릭하여 복사

주의사항!

class명이 위의 사진 속 gLFyf gsfi와 같이 빈칸이 존재하는 경우는 빈칸을 점(.)으로 변경해주어야 한다! 즉, 클래스명을 gLFyf.gsfi라고 입력해준다.

Step 2. selenium으로 타겟팅한 html 찾기

Selenium의 find_element( ) 함수에 복사해놓은 클래스명 (gLFyf.gsfi)을 ( ) 안에 넣어서 크롬 드라이버가 알아먹을 수 있게 변환한다.

이때 클래스명 앞에 로케이터(Locator)라는 코드를 붙여줘야 한다!

코드 1. 모듈 import 및 구글 드라이버를 통해 구글 접속

※여기서 time.sleep(3)으로 하니까 구글 드라이버가 3초밖에 생성이 안되었다. 1000정도로 바꾸고 만약 종료하고 싶으면 ctrl + c를 눌러 종료하자!

코드 2. find_element() 함수로 구글 드라이버가 검색창 찾음

코드 2에서 xpath아까 찾았던 html 코드 위에서 '우클릭' -> 'Copy Xpath'를 클릭 -> 클립보드에 //*[@id="google_search"] 라는 xpath가 저장 -> 코드에 넣기

Step 3. 원하는 조작 수행하도록 명령 내리기

  • 클릭 : .click( )
  • 키 입력: .send_keys( )

코드

search_box.send_keys('검색어') : 검색창에 검색어 입력

search_box.send_keys(Keys.RETURN) : 엔터키 치는 것과 동일

※ 참고로 Google 검색 버튼 타겟팅 해주고 .click( ) 함수로 '마우스 클릭' 해줘도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있다.

▶동적 웹크롤링 - 텍스트, 하이퍼링크, 이미지 가져오기

웹크롤링(1)의 정적 크롤링에서의 방식과 거의 동일하다!

웹크롤링(1)에서 배운 1,2번 단계(html 문서 싹 긁어와서 파싱)에 대한 코드는 아래와 같다.

이후 f12로 개발자 도구로 들어가 -> 크롤링 원하는 부분을 selenium 패키지로 가져와야한다.

① 텍스트 추출: .text

선택자(css selector)를 이용해 원하는 부분의 html을 변수에 저장해준 후 아래와 같이 for 문과 .text 함수를 이용해준다.

코드

실행 결과

② 링크 추출: .get_attribute('href')

href 속성은 news_titles 변수에 저장되어 있어 바로 for문 작성(정적 크롤링과 같음)

코드

실행 결과

③ 이미지 추출: .get_attribute('src')

이것도 정적 크롤링 방식과 같다.

1. 이미지 주소(src)를 가지고 있는 html을 news_thumnail 변수에 저장

2. 이미지 다운로드를 위해서 해당 주소들을 리스트(link_thumnail)에 append 함수를 이용해 하나씩 삽입

3. 사진을 다운로드 받아서 내 PC에 저장하기 위해서 저장할 폴더를 만들고, src 주소를 이용해 다운로드

※폴더 생성에는 os 모듈과 urllib.request 패키지의 urlretrieve 함수가 필요하지만 모두 다 파이썬 내장 라이브러리이므로 따로 설치해주실 필요 없이 import 해주면 된다.

코드

실행 결과

'2024 SWLUG > 파이썬 프로젝트 - 크롤러' 카테고리의 다른 글

검색/크롤링/스크래핑  (0) 2024.05.22
웹크롤링(1)  (0) 2024.05.22
파이썬 개발환경 구축  (0) 2024.05.22