가끔 웹 크롤러를 개발하다 보면 이런 상황이 있습니다.
윈도우에서 web crawler를 개발하면 당연히 화면이 있죠?
여기서 화면이라는 것은 window가 있다는 것입니다. 즉, 크롬 브라우저를 띄울 수 있고 그걸 볼 수 있습니다.
이러한 환경은 ubuntu나 centos에서도 마찬가지입니다.
하지만, 모든 환경이 다 이렇지 않습니다.
linux 계열의 서버를 사용할 때 이런 window 개념이 없을 수도 있습니다.
말 그대로 kernel 상태만 주어지고 display가 없는 상태이죠
그럼 이 display가 없는 상태에서 python seleinum으로 웹 크롤러를 어떻게 개발할까요?
selenium은 web browser를 화면에 띄우고 거기서 html 데이터를 가지고 옵니다.
근데 이 display가 없으면? selenium을 활용한 웹 크롤러는 동작이 되지 않습니다.
이럴 때 사용하는 방법이 있습니다.
linux 계열에서 chromedriver를 활용해서 headless web crawler를 개발하면 됩니다.
chromedriver를 활용하여 headless 웹 크롤러를 만들면 display가 없이도 크롤러를 개발 할 수 있습니다.
그 방법에 대해서 알아보죠
저는 centos 7 환경에서 headless 크롤러를 만들어봅니다.
먼저 chrome driver를 받아야합니다.
sudo vi /etc/yum.repos.d/google-chrome.repo 파일을 하나 만듭니다.
그리고 위 사진과 같이
[google-chrome]
에 해당되는 내용을 채워넣습니다.
자! 이제 sudo yum install google-chrome-stable을 통해 google chrome을 받아줍니다.
잘 받아졌으면 google-chrome --version을 통해 버전을 확인할 수 있습니다.
자! 이제 구글에 chromedriver를 검색합니다.
그러면 chromedriver를 받을 수 있습니다. 이 chromedriver를 받아야 headless crawler를 개발할 수 있습니다.
위에서 확인했던 google chrome 버전과 일치하는 webdriver를 받아줍니다.
그러므로 저 주소를 복사해서
wget을 이용해서 다운을 받아줍니다.
다운을 다 받았으면 unzip을 해줍니다.
다음은
sudo mv chromedriver /usr/local/bin
으로 chromedriver를 옮겨줍니다.
자! 이제 셋팅은 끝났습니다.
실제 파이썬 코드를 적용시키면
web crawler를 개발할 때 필요한 selenium 부분은 전부 일치합니다.
거기서 변하는 것은 없습니다.
즉, 윈도우 환경에서 잘 됐던 selenium crawler 상태에서 위와 같은 내용만 추가하면 됩니다.
from pyvirtualdisplay import Disply
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
display = Display(visible = 0, size = ())
display.start()
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('disable~~')
등 이렇게 필요한 설정을 해주시면 됩니다.
그리고 driver를 불러올 때 webdriver.Chrom(executable_path = '/usr/local/bin/chromedriver', chrome_options=chrome_options)
를 통해 아까 다운 받았던 chromedriver를 연결해주고 option을 셋팅해주면 됩니다.
이렇게 하시면 headless web crawler가 완성이 됩니다!
'python' 카테고리의 다른 글
python 주피터 노트북(jupyter notebook) 색상 및 테마 변경하기 (7) | 2019.10.02 |
---|---|
은전한닢(mecab) 형태소 분석기 사용자 단어 사전 추가하기(user word dictionary) (0) | 2019.09.08 |
python dict to dataframe 방법과 에러(ValueError: DataFrame constructor not properly called!) 해결 (4) | 2019.07.26 |
형태소 분석기 MeCab! 은전한닢을 설치하고 파이썬과 연동하기! (18) | 2019.06.26 |
centos에 python3.x 설치하기! (2) | 2019.04.24 |