Selenium (Python)을 사용한 웹 스크래핑
물론, 취득한 데이터를 이용해, 효율적으로 모델을 갱신하거나 합니다만, 자동화하고 싶은 경우가 있습니다.
이번에는 흔히 말하는 웹 스크래핑으로 셀레늄을 사용해 보겠습니다.
주의사항
기계적인 다운로드가 금지되어 있는 경우가 많기 때문에, 액세스 대상 사이트의 이용 약관을 잘 읽어 주세요.
웹 스크래핑 라이브러리의 대표적인 것
조사한 한이라면 몇 가지 선택 프레임이 있지만 이번에는 사용한 적이 없으므로 Selenium을 사용해 보겠습니다.
내 인식에서는 Selenium은 웹의 화면 조작을 자동화하는 도구이지만, 화면 조작의 자동화를 스크래핑에 이용해 버리는 것입니다.
조사한 한이라면 몇 가지 선택 프레임이 있지만 이번에는 사용한 적이 없으므로 Selenium을 사용해 보겠습니다.
내 인식에서는 Selenium은 웹의 화면 조작을 자동화하는 도구이지만, 화면 조작의 자동화를 스크래핑에 이용해 버리는 것입니다.
환경
Selenium과 브라우저 (이번에는 Chrome) 사이에 WebDriver라는 드라이버가 필요합니다.
Selenium 설치
Python은 Anaconda를 사용하므로 conda로 설치합니다.
conda install selenium
WebDriver 설치
WebDriver는 바이너리 파일을 http://chromedriver.chromium.org/downloads에서 다운로드
Path가 통과하는 위치에 복사하는 방법과 pip에서 설치하는 방법이 있습니다.
이번에는 pip(conda)로 설치합니다.
conda install chromedriver-binary
샘플 실행
환경이 생겼으므로 먼저 소개 아래 chromedriver 사이트의 샘플을 실행해 보겠습니다.
내용을 보려면 구글 사이트를 표시하고 ChromeDriver를 검색하고 5 초 수면 종료 등의 내용.
h tp // ch로메 d리ゔぇr. ch 로미우 m. 오 rg / 갓친 g-s r d
test1.pyimport time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
python test1.py
실행되면 브라우저가 시작되어 ChromeDriver를 검색하기 시작합니다. 브라우저에 "자동 테스트 소프트웨어에 의해 제어됩니다."라고 표시됩니다!
그리고 간단하다!
오픈 데이터 취득 샘플
샘플이 기동하는 것만으로 종료에서는 외롭기 때문에, 아래와 같은 사이트로부터 CSV를 다운로드해 오는 샘플을 만들어 보겠습니다.
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
python test1.py
샘플이 기동하는 것만으로 종료에서는 외롭기 때문에, 아래와 같은 사이트로부터 CSV를 다운로드해 오는 샘플을 만들어 보겠습니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
download_dir = 'C:\\project'
prefs = {}
prefs['download.prompt_for_download'] = False
prefs['download.directory_upgrade'] = True
prefs['download.default_directory'] = download_dir
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://XXXXXXXXXXXXXXXXXXXXXX');
time.sleep(5) # Let the user actually see something!
url = driver.find_element_by_partial_link_text("日次データ(CSV)")
driver.command_executor._commands["send_command"] = (
"POST",
'/session/$sessionId/chromium/send_command'
)
params = {
'cmd': 'Page.setDownloadBehavior',
'params': {
'behavior': 'allow',
'downloadPath': download_dir
}
}
driver.execute("send_command", params=params)
driver.get(url.get_attribute('href'));
time.sleep(5) # Let the user actually see something!
driver.quit()
브라우저 숨기기 실행
코드의 다음 부분에서 브라우저를 시작할 때 선택적으로 --headless를 전달하여 브라우저를 숨깁니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
다운로드 파일을 저장할 위치 지정
코드의 다음 부분에서 다운로드 파일을 저장할 위치를 지정합니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
download_dir = 'C:\\project'
prefs = {}
prefs['download.prompt_for_download'] = False
prefs['download.directory_upgrade'] = True
prefs['download.default_directory'] = download_dir
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
--hedless의 경우 추가로 다운로드 파일을 저장할 위치 지정
--hedless의 경우, 추가로 다운로드 파일을 저장할 위치를 지정하는 코드가 필요합니다.
driver.command_executor._commands["send_command"] = (
"POST",
'/session/$sessionId/chromium/send_command'
)
params = {
'cmd': 'Page.setDownloadBehavior',
'params': {
'behavior': 'allow',
'downloadPath': download_dir
}
}
driver.execute("send_command", params=params)
이것으로 다운로드가 완료됩니다! 간단.
요약
복잡한 일을 하면 코드가 늘어날 것 같습니다만, Selenium을 사용한 적이 있는 사람이라면 Web스크래핑에 Selenium을 선택하는 일도 있을 것 같습니다.
단점으로는 브라우저 드라이버와 설치하는 것이 늘어날 정도입니까.
브라우저상에서, 작성한 Selenium 스크립트가 움직이면 편리할 것 같습니다만, 아직 불완전한 것 같습니다.
복잡한 일을하는 데 도움이 될 것 같은 사이트
Reference
이 문제에 관하여(Selenium (Python)을 사용한 웹 스크래핑), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sshinobu/items/9d6d1169093f8db705df텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)