비즈니스 문제를 해결하고 예측하는 데이터 사이언티스트가 되고 싶다면?
#소프트웨어 

구글 코랩으로 크롤링하기

Selenium ver.4 와 구글 코랩으로 크롤링 따라해보기

2023-01-18 | 전진환

목차

  • 구글 코랩 준비하기
  • Selenium Ver.4 준비하기
  • Selenium 간단히 따라해보기
  • 마무리
  • 출처

 

이전글인 크롤링을 하기전 알아보면 좋은점” 을 읽고 진행하면 좋습니다. 아래에 있는 출처를 참고해주세요.

구글 코랩 준비하기


[구글 코랩]

코랩을 실행하면 다음과 같은 화면을 보여줍니다. 우측에 클라우드와 제대로 연결 된 것을 확인하고 좌측 상단의 “+코드”를 선택하여 코드블럭을 생성합니다.

Selenium Ver.4 준비하기

우선 코랩에서 Python과 Selenium의 버전을 확인합니다. 버전을 확인하는 코드는 다음과 같습니다.

# 느낌표를 붙이면 Shell 명령어로 실행됩니다.
!python --version 

# Selenium을 확인하려면 다음과 같이 사용해야 합니다.
import selenium
print(selenium.__version__)

제가 사용하는 코랩에서 Python은 3.8이 나왔고, Selenium은 4.7이 나왔습니다. Selenium의 버전이 4 이후부터는 기존에 3에서 사용하는 문법과의 차이가 있기 때문에 공식문서를 참고하도록 합시다.

우선 Selenium을 설치하지 않았다면 다음과 같이 설치합니다.

# 코랩을 시작할 때 아래코드를 한 번 돌려줍니다.
!pip install selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

위 코드의 의미는 다음과 같습니다.

1. Selenium 설치
2. apt 업데이트
3. chromedriver 설치
4. 해당경로에 설치한 chromedriver를 복사

 

[ 좌 : Chromium / 우 : Chrome ]


혹시 chromium(크로미움)이라고 들어보셨나요? 크롬의 개발자버전이라고도 불리는 브라우저로 우리는 코랩에서 크로미움을 사용한다는 정도로만 알고 지나가도록 하겠습니다.😮
차이점이 궁금하시다면 아래 출처에서 “크로미움 참고”글을 확인해주세요.

Selenium 간단히 따라 해보기

우선 필요한 라이브러리와 패키지를 불러와 실행시켜봅시다.

from selenium import webdriver
from selenium.webdriver.common.by import By

Selenium의 버전이 4로 올라가면서 3에서는 사용하지 않던 “from selenium.webdriver.common.by import By”를 사용하게 되었습니다.

로컬 환경에서 Selenium을 사용하면 동적 크롤링 답게 실시간으로 크롤링이 되는 광경을 목격하실 수 있습니다. 그러나 코랩에서는 별도로 웹브라우저창이 띄울 수 없기 때문에 별도의 설정이 필요합니다. (창이 반응하는 것을 보이지 않는 것은 아마도 운영체제가 리눅스 기반이기 때문에 그런것 같습니다.)

options = webdriver.ChromeOptions()
options.add_argument('--headless')        # Head-less 설정
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver', options=options)

option을 다음과 같이 headless로 합니다.
이렇게 하면 구글 코랩에서 Selenium을 사용하기 전 준비가 끝이 났습니다.

구글 실행하고 네이버 검색하기

바로 실전으로 들어가서 다음과 같은 방법으로 간단하게 Selenium을 사용해보겠습니다.

  1. 구글을 켠다.
  2. 구글 검색창을 눌러 검색창을 인식한다.
  3. ‘네이버’를 텍스트로 입력한다.
  4. 입력한 것을 검색한다.
  5. 잠시 대기한다.

코드는 다음과 같습니다.

url = "https://www.google.com/webhp?hl=ko&sa=X&ved=0ahUKEwjEmoTtkc78AhW8hVYBHSlIALMQPAgI" 
driver.get(url)

print(driver) # 실행 확인

로컬 환경에서 headless를 설정해주지 않는다면 직관적으로 다음과 같은 브라우저 창이 열림을 실제로 확인할 수 있습니다.

[ Selenium을 사용하여 원하는 주소로 자동 수행 ]


google 주소를 입력했기 때문에 코드를 실행하면 google 창이 자동으로 실행됩니다.

search = driver.find_element(By.NAME,"q")
search.send_keys('네이버')
search.submit()

구글 검색창을 인식해야하는데 다음과 같이 q를 사용합니다.

[ 크롬브라우저 개발자도구 HTML ]

개발자도구에서 검색창의 HTML 태그를 확인해보면 name이 ‘q’로 되어있습니다. 이것을 지정함으로 검색창을 찾을 수 있습니다.

다음은 원하는 검색어를 입력합니다. 저희는 네이버를 검색하기로 했기 때문에 네이버를 입력합니다.
그리고 submit을 통해 click(=ENTER)과 같은 효과로 검색할 수 있습니다.

그러면 다음과 같은 화면에서 2초간 대기하게 됩니다.

[ 구글에서 네이버 검색 ]

여기서 대기를 하는 이유가 있습니다. 만약에 대기시간을 지정하지 않는다면 빠르게 움직이기 때문에 해당 서비스를 관리하는 서버에 과부하를 일으킬 수 있습니다. 그러면 내가 크롤러(bot)를 사용하는 것을 관리자가 알 수 있기 때문에 차단을 시킬 수 있습니다.
그렇기 때문에 중간에 대기 시간을 꼭 넣어주며 앞서 블로그에서 설명한 것처럼 접근할 수 있는 페이지와 못하는 페이지를 충분히 분석하고 사용을 해야 합니다.

 

마무리

어떤신가요? 크롤링의 활용 가능성은 무궁무진합니다. 스크린샷도 자동으로 찍을 수 있고 원하는 텍스트를 긁어 엑셀파일에도 저장할 수 있습니다. 여기에 for문과 while문을 활용한다면 단순한 일도 봇에게 시켜놓고 퇴근할 수 있습니다.🤭

정말 간단하게 사용법에 대해 설명을 드렸는데 다음시간에는 로컬에서 직접 설치해보고 크롤링을 해봅시다.
그러면 코랩에서와는 다르게 실시간으로 작동하는 것을 볼 수 있으니까 더욱 재미 있으실 겁니다.

그럼 다음시간에 만나요…! 🫡

 

출처

 

Flutter 배우는데 Dart 언어 찍먹해서 되겠어요?

모두의연구소 오름캠프 [Flutter 모바일 앱 과정] 수강생의 인터뷰입니다.다른 프레임워크에 비해 꾸준하게 개발되서 플러터를 선택했는데,가장 근간인 Dart를 제대로 배울 수 있어서 좋았다고 하는데,자세한 내용은 영상에서 만나요!모두의연구소 오름캠프 [Flutter 모바일 앱 과…