Dev/Python

Python으로 Crawling 준비하기(Beautifulsoup4, Selenium 설치 & Chromedriver 설정)

sincerely10 2020. 10. 24. 23:47
반응형

안녕하세요. 이번 포스트는 Python으로 크롤링을 준비하기 위해 필요한 과정을 기술해보도록 하겠습니다. 이 전에 Beautifulsoup과 Selenium으로 크롤링 하는 과정을 예시로 설명하였는데요.
다시 포스트를 보니 정작 중요한 초기설정 및 설치가 빠져 있었습니다. 하나씩 설명 드리도록 하겠습니다.

+ 현재 개발중인 회사에서도 크롤링을 많이 활용할 것 같아 크롤링에 대한 포스트가 조금 더 다양하게 올라오지 않을까 하는 생각입니다.

1. miniconda로 크롤링 가상환경 생성하기

먼저 conda 또는 miniconda(미니콘다)를 생성 해주도록 하겠습니다. Python을 Server 또는 개인 PC에 바닐라로 설치해 사용해도 좋지만, 다양한 프로젝트를 하다보니 각각 가상화된 환경을 만들어 사용할 수 있고 conda 보다 가벼운 miniconda를 사용하시는 것을 추천드립니다!
miniconda에 대한 설치 내용도 곧 포스팅 하도록 하겠습니다.

혹시 conda 또는 miniconda를 사용할 계획이 없으시다면, '2. beautifulsoup 설치' 로 바로 진행 해주시면 되겠습니다.

위에서 언급한 대로 저는 가벼운 환경에서 Python을 돌리므로 miniconda를 활용 해보도록 하겠습니다.
minconda를 설치하면 아래 사진과 같이 base라는 기본환경이 표기 됩니다. 이는 현재 설치한 miniconda의 환경이 표기됩니다.(저와 같은 경우 miniconda 3.8.3 64bit version을 설치 했으므로 3.8.3의 환경이 되겠습니다.(저는 iTerm2에 powerlevel 10k를 설치해서 아래 이미지 처럼 표기되는 것 입니다.) 

이제 본격적으로 Python 가상환경을 생성해보겠습니다. 저는 무신사 상품을 크롤링할 예정이므로 'musinsa_crawler'라는 가상환경을 만들어 보겠습니다. 터미널에서 아래 명령어를 입력해주세요.

$ conda create -n musinsa_crawler python=3.8

- create는 새로운 환경을 만든다는 명령어 입니다.
- -n은 뒤에 오는 내용이 name이라는 것을 약속해주는 옵션입니다.
- name 저의 경우 musinsa_crawler는 여러분이 만드실 env(환경)의 이름을 작성해주시면 됩니다.
- python=3.8은 원하시는 Python 버전을 기입하는 것 입니다. python 3.7 또는 python 3.8의 버전을 추천드립니다.

이제 Enter를 입력하시면 쭈루룩 설치할 환경이 아래와 같이 보여집니다.

위 항목들을 설치할건지 확인하는 과정인데 y를 입력해줍니다.

설치가 진행되고 다시 base로 돌아왔습니다.

이제 저희가 만든 env를 확인 해보고 activate 즉, 활성화 해보겠습니다.

생성한 conda의 env 목록을 확인 하시려면 아래 명령어를 입력 해주세요.

$ conda env list

musinsa_crawler라는 환경변수가 잘 만들어졌습니다!(저 별표는 현재 activate 된 env에 체크가 된 것입니다.)

이제 이 env를 활성화 해보겠습니다. 활성화는 아래 명령어 처럼 해주세요.

$ conda activate musinsa_crawler

드디어 저희가 원하는 새로운 환경변수를 만들고 변경을 했습니다.

2. Beautifulsoup4 설치

HTML 또는 XML 문서를 tag 등으로 parsing 할 수 있는 즉, 실질적 크롤링을 진행 해주는 Beautifulsoup4를 설치 해보도록 하겠습니다.

설치 명령어는 정말 간단합니다.

$ pip install beautifulsoup4

정말 잘 설치가 됐는지 확인하고 싶다면, 다음 명령어로 env의 설치 내역을 확인할 수 있습니다.

$ pip freeze

certifi는 기본 설치 모듈이고, soupsieve는 beautifulsoup4 설치 시 Default로 설치되는 모듈 입니다.

3. Selenium 설치

크롤링 하려는 웹페이지가 Beautifulsoup4로만 할 수 있다면 다행이지만, 동적 페이지(JavaScript등의 언어로 구성)인 경우는 이 페이지를 받아와 추가적인 제어를 해줘야 크롤링을 진행할 수 있는 경우가 있습니다. 원하는 element를 한 번에 찾을 수 없을 수도 있기 때문입니다.

이 전 포스트에도 적었지만, 실제 element를 찾는 역할은 Beautifulsoup이 하지만 웹동작은 Selenium이 합니다.

추후에 Selenium으로 할 수 있는 클릭, 화면 내 이동 등에 대해서 추가적으로 다뤄보겠습니다.

설치방법은 동일 합니다. 다음과 같은 명령어를 통해 설치할 수 있습니다.

$ pip install selenium

설치가 잘 됐는지도 확인해보겠습니다.

selenium과 같은 필요 패키지인 urllib3도 설치가 되었습니다.

4. Chromedriver 설치

Selenium은 작동시킬 수 있는 브라우저가 있어야 동작이 가능합니다. 가장 많이 활용되는 구글의 Chrome Driver를 설치 해보겠습니다.

먼저 크롬의 버전을 확인 해주어야 합니다.
구글크롬 버전확인은 크롬 상단 오른쪽에 3개의 점이 있는 곳을 클릭 > 설정으로 들어갑니다.

좌측 하단 메뉴 중 Chrome 정보 라는 메뉴를 누릅니다.
기다리시면, 중앙에 크롬 버전이 뜹니다.

버전을 확인 하셨다면, 이제 설치 페이지로 가서 해당 버전을 설치 해줍니다. 설치 사이트는 아래와 같습니다.

sites.google.com/a/chromium.org/chromedriver/downloads

해당 사이트에서 제가 사용하는 86 버전을 찾아 클릭 해줍니다.

해당 링크를 클릭하면 다시 한 번 아래 사진과 같이 파일 다운로드가 가능한 창이 나오는데요.

저는 mac OS를 사용하므로 zip 파일을 다운 받아줍니다.

그리고 실행을 해보는데,

외부 다운로드라서 다음과 같은 경고가 나올 것 입니다. 이 때, 환경설정에서 신뢰 할 수 있다고 체크를 해주어야 정상적으로 zip 파일의 압축을 해제할 수 있습니다.

시스템 환경설정 -> 보안 및 개인 정보 보호 -> 일반 탭에서 다음과 같은 화면이 보이실 겁니다.

아래에 자물쇠 버튼을 클릭해주면 보안 내용을 바꿀 수 있게 됩니다. 그리고 하단에 chromedriver에 대해서 '확인 없이 열기'를 클릭 해주어 열 수 있도록 해줍니다.

클릭 하면 아래와 같이 다시 한 번 확인하는데 직접설치한 chromedriver가 맞다면 열기를 클릭 해줍니다.

zip 파일의 chromedriver를 열어보면 정상적으로 시작 됐다는 아래 메세지를 보실 수 있습니다.

여기까지 정상적으로 실행 되었다면 다행이지만, 저의 경우에 아래와 같은 오류 메세지를 확인하게 되었습니다.

MacOS Catalina (v 10.15.3) : 오류 : 개발자를 확인할 수 없기 때문에“chromedriver”를 열 수 없습니다. 

이 경우 아래의 명령어로 해결 할 수 있습니다. 먼저 chromdrvier가 설치된 경로까지 이동해줍니다. 저의 경우 ~/Downloads 입니다.
여기서 설치하고 압축 해제한 chromedriver에 대해 다음 명령어를 입력해줍니다.

$ xattr -d com.apple.quarantine chromedriver

xattr는 파일의 속성을 관리할 수 있는 commad 입니다. d 옵션을 주면 delete 즉, 특정 속성을 제거할 수 있는 것입니다. 즉, chromedriver에서 com.apple.quarantine이라는 속성을 제거 해주는 명령어입니다. 이 com.apple.quarantine은 mac OS에서 한 번더 검열 해주는 속성인 것으로 파악됩니다.

여기까지 하면 기본 설정에 대해서는 다 끝낸 것 입니다! 이제 코딩만 하면 되는 단계입니다.

사실 바로 위의 에러 때문에 한 번 정리할 필요가 있다 생각해서 정리하게 된 것인데 자세히 정리할 수 있어 좋았습니다.

5. chromedriver 설정

마지막으로는 chromedriver의 python 코드 내에서의 몇 가지 설정을 해보겠습니다.
저의 경우에 이렇게 한다는 것일 뿐 꼭 정답은 아니라고 말씀드립니다.

from bs4 import BeautifulSoup
from selenium import webdriver

# webdriver 설정
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument("disable-gpu")
options.add_argument("--kiosk")

driver = webdriver.Chrome("/Users/kono/Downloads/chromedriver", options=options)
URL    = "https://search.musinsa.com/"

driver.get(URL)

- 먼저 ChromeOptions()를 통해 chromedriver의 option 정보를 설정할 수 있습니다.
- headless는 크롬의 화면이 보이지 않고 크롤링 하는 기능입니다. 이 기능을 사용하면 발열이나 계속 화면이 나타나지 않게 할 수 있는 등 추천하는 설정입니다.
- disable-gpu는 크롬을 비롯한 브라우저에서 빠른 랜더링을 위해 GPU를 사용하는데, 크롬에서 버그가 일어나는 현상이 발생합니다. 이 설정 또한 적용하는 것을 추천드립니다.
- --kiosk는 전체화면으로 보여지는 설정입니다. 별다른 설정이 없으면 최대화면이 아니라 작게 열리는 창이 뜨는 경우가 있습니다. 이 때 스크롤 다운과 같은 동작을 하면 최대화면이 아니기 때문에 스크롤을 더 하거나 시간이 더 소요되는 것을 확인 하였습니다. 이 옵션도 적용해보는 것을 추천드립니다.

위와 같은 설정을 하고 URL에 크롤링 할 사이트를 적어 주신다면 크롤링을 할 모든 준비가 끝난 것입니다! 물론 긁어오는 태그 등을 처리하는 코딩을 하는 과정이 남아있지만요.

크롤링에 대해서 더 자세한 내용으로 찾아 뵙겠습니다. : )

반응형