크롬 버전 99.0.4844.51 기준으로 작업하였습니다.
@ 설치방법
pip install selenium
브라우저별로 selenium webdriver를 다운로드 // 크롬 브라우저 이용 기준
자신의 크롬브라우저에서 '설정>Chrome 정보' 에 가서 최신 업데이트 하고 해당 버전으로 설치할 것
https://sites.google.com/a/chromium.org/chromedriver/downloads
다운로드 받은 chrome.exe를 작업할 python 파일과 같은 폴더에 넣을 것
그렇지 않다면 아래 코드에서 디렉토리를 설정해주어야 함.
@ 사용예제
python에서 서술 / 전시회 정보를 크롤링하는 예제
# selenium import 부분
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 같은 폴더에서 크롬드라이버 불러오기
driver = webdriver.Chrome('chromedriver')
# 네이버 전시회 검색결과 띄우기
driver.get(url='https://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=bjBC&qvt=0&query=%EC%A0%84%EC%8B%9C%ED%9A%8C')
# 해당 페이지가 전부 로드될 때 까지 대기
time.sleep(1)
# page가 87번까지 있으므오 86번 반복실행
for i in range(1,87):
# 크롤링 할 박스 선택
divs = driver.find_elements(by=By.CSS_SELECTOR, value='#mflick > div > div > div > div > div')
for div in divs:
# a_title : 전시회 제목 / a_time : 전시회 기간 / a_place_name : 장소 / a_place_url : 장소 관련 사이트 / a_image : 전시회 이미지 링크
# find_elements 는 해당하는 태그를 리스트 형식으로 불러오므로 0번째를 골라서 추출함 / 한개만 불러올 때는 find_element를 사용하는 것을 추천
# 괄호 안 by 값을 CSS_SELECTOR 대신에 다른 것으로 변경하면 id 태그 이름 등으로 찾을 수 있다. 자세한 사항은 참고 링크 참조 / 해당 링크에는 전 버전으로 서술되어 있어 함수는 아래와 같은 형식으로 사용할 것.
a_title = div.find_elements(by=By.CSS_SELECTOR, value='div.data_area > div > div.title > div > strong > a')[0].text
a_time = div.find_elements(by=By.CSS_SELECTOR, value='div.data_area > div > div.info > dl:nth-child(1) > dd')[0].text
a_place_name = div.find_elements(by=By.CSS_SELECTOR, value='div.data_area > div > div.info > dl:nth-child(2) > dd > a')[0].text
a_place_url = div.find_elements(by=By.CSS_SELECTOR, value='div.data_area > div > div.info > dl:nth-child(2) > dd > a')[0].get_attribute("href")
a_image =div.find_elements(by=By.CSS_SELECTOR, value='div.data_area > a > img')[0].get_attribute("src")
print(a_title, a_time, a_place_name, a_place_url, a_image)
# 클릭 할 버튼 생성
NextPageBtn = driver.find_elements(by=By.CSS_SELECTOR, value='#main_pack > div.sc_new.cs_common_module.case_list.color_1._kgs_art_exhibition > div.cm_content_wrap > div > div > div.cm_paging_area._page > div > a.pg_next.on')
# 해당 버튼 클릭
NextPageBtn[0].click()
# 클릭 이후에 박스가 로딩될 때까지 대기
time.sleep(0.2)
Selenium 업데이트로 인해 아래 사이트와 사용하는 함수 형태가 다름
함수 형태는 위의 코드를 참고