CentOS7에서 Google Chrome + Python3 + selenium으로 웹 크롤링 기초
그동안 웹 크롤링을 한번도 안해봤는데, 이번에 한번 연습해보면서 과정을 정리해둔다.
1. Python3 + selenium 설치
나는 예전부터 CentOS에 Python3는 Source Compile 해서 설치해왔다. 그런데 2019년 하반기에 드디어 CentOS7 base repository에 Python3가 등록된 것 같다. 그래서 본 글에서는 rpm (yum) 설치로 진행하겠다.
yum -y install python3
설치 후 필수는 아니지만 pip 버전도 업그레이드를 해준다.
pip3 install -U pip
그리고 나서 selenium도 설치해준다.
pip3 install selenium
2. Google Chrome 설치
브라우저는 Chrome 뿐 아니라 Firefox나 다른 것들도 있겠지만, 나는 Chrome을 주로 사용하니 이 글에서는 Chrome 기준으로 진행하겠다.
우선 Linux용 Chrome은 아래 Chrome 공식 사이트에서 Fedora/openSUSE용 rpm 버전으로 받으면 된다.
https://www.google.com/intl/ko/chrome/?platform=linux
나는 GUI 없이 시커먼 ssh 터미널 환경에서 진행하고 있기 때문에 직접 다운로드 링크가 필요하다. 위 링크에서 다운로드 받는 최신 Stable 버전의 직접 다운로드 링크는 아래와 같다.
https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
wget으로 받아서 yum 또는 rpm 명령어로 설치해도 되고, 직접 yum 명령어로 주소를 바로 입력해도 된다.
yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
3. Chrome Driver 설치
selenium으로 Chrome 브라우저를 제어하려면 Driver가 필요하다. Chrome Driver는 아래 사이트에서 다운로드 받을 수 있다.
https://sites.google.com/a/chromium.org/chromedriver/
현재 기준으로 ChromeDriver 80.0.3987.106이 최신 Stable 버전인데 위에서 다운로드 받은 Chrome 최신 Stable 버전과 거의 동일하다.
참고로 위에서 설치했던 크롬 버전은 아래와 같이 확인해볼 수 있다.
google-chrome --version
다운로드 받은 Chrome Driver는 그냥 압축 풀고 바로 사용할 수 있는 Binary 파일이다. 나는 /usr/bin 디렉터리 아래로 이동해서 사용하겠다. (어디가 되었든 PATH 걸려있는 위치에 두면 편하니)
wget https://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
mv chromedriver /usr/bin/
4. selenium으로 크롤링 실습
이제 selenium으로 실제 크롤링을 실습해보자.
python3 쉘에서 아래와 같이 연습해보자.
여기까지 에러가 없으면 Chrome 구동이 된 것이다.
그럼 이제 웹 사이트를 열어서 얻고싶은 정보를 얻으면 된다.
아래는 실거래닷컴 사이트를 열어서 경기도 용인시 신고가를 가져와 한줄씩 text만 출력해보는 예제이다. 결국 각 사이트별로 개발자도구로 보면서 Element id나 name을 확인해서 크롤링 해야 한다.
실제로 로그인이나 검색처럼 복잡한 조작을 하려면 find_element_by_id, send_keys, click 등의 method를 적절히 잘 활용하면 된다.
나도 오늘 처음 설치하면서 실습해본거라 기초는 여기까지 하고, 더 복잡한 스킬은 추후 사용해보면서 필요시 추가 포스팅하도록 하겠다.
'리눅스' 카테고리의 다른 글
리눅스 crontab date +% 포맷 작동하지 않는 경우 (1) | 2020.03.23 |
---|---|
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128) (0) | 2020.02.06 |
python -m json.tool 유니코드 한글 깨짐 (0) | 2020.02.06 |
리눅스 IP 주소 정렬 (0) | 2019.09.16 |
BlueStacks 4 vdi 파일 용량 축소 (1) | 2019.07.16 |
BlueStacks 4 Disk 용량 증설 (0) | 2019.07.09 |
리눅스 특정 라인 이하 삭제 (0) | 2019.05.21 |
Docker Hub 이미지 tag list 확인 방법 (0) | 2019.05.01 |
최근에 달린 댓글 최근에 달린 댓글