본문 바로가기
IT와 꿍짝

파이썬으로 웹 크로링(Web Crawling) 방법-Selenium, ChromDriver, BeautifulSoup4, python sns4u

by 해피비(HappyB, Happy plan B) 2021. 4. 26.
반응형

안녕하세요. 행부장입니다.

파이썬으로 웹크로링 하는 방법(Selenium, ChromDriver, BeautifulSoup4, python 3.7.9 환경 ) 버전 확인(python --version) 0.필요프로그램 설치 1) pip install bs4 2) pip install selenium 3)ChromeDriver https://chromedriver.chromium.org/downloads chrome 버전에 맞는 것 다운로드 후, 특정 폴더 압축 해체(windows인 경우, chromedriver_win32.zip) "D:/programs/chromedriver/chromedriver.exe" ############################################################################################### 1. selenium 사용하기 Python from bs4 import BeautifulSoup from selenium import webdriver import time import datetime #1) 크롬 드라이버를 사용해서 웹 브라우저를 실행 #query_txt = input('크롤링할 키워드는 무엇입니까?: ') query_txt='봄여행' path = "D:/programs/chromedriver/chromedriver.exe" driver = webdriver.Chrome(path) driver.get("https://korean.visitkorea.or.kr") time.sleep(2) # 위 페이지가 모두 열릴 때 까지 2초 기다립니다. #코로나 얼럿창 있을 경우 닫기 클릭하기 try : driver.find_element_by_xpath('//*[@id="safetyStay1"]/div/div/div/button').click() except : print("알림창이 없습니다") #2) 검색창의 이름을 찾아서 검색어를 입력 element = driver.find_element_by_id("inp_search") ############################################################################################### #3) 검색 버튼을 눌러 실행 element.send_keys(query_txt) element.send_keys("\n") #driver.find_element_by_link_text("검색").click() #driver.find_element_by_class_name("btn_search2").click() # class name 으로도 가능합니다. #driver.find_element_by_xpath('//*[@id="gnbMain"]/div/div/div[1]/div[1]/a').click() # xpath 로도 가능합니다. #4) 현재 페이지에 있는 내용을 화면에 출력 time.sleep(1) full_html = driver.page_source soup = BeautifulSoup(full_html, 'html.parser') content_list = soup.find('ul','list_thumType type1') for i in content_list: print(i.text.strip()) print("\n") #5) 현재 페이지에 있는 내용을 txt 형식으로 파일에 저장 #f_name = input('검색 결과를 저장할 파일경로와 이름을 지정하세요(예:d:\\temp\\test.txt): ') nowDate = datetime.datetime.now() f_name = "d:\\temp\\" + nowDate.strftime("%Y%m%d-%H%M") + ".txt" orig_stdout = sys.stdout f = open(f_name , 'a' , encoding='UTF-8') sys.stdout = f time.sleep(1) for i in content_list: print(i.text.strip()) print("\n") sys.stdout = orig_stdout f.close() print('요청하신 데이터 수집내용이 %s에 저장되었습니다'%f_name) ###참고:페이지의 특정 element에 접급하는방식 # find_element_by_name('name') # find_element_by_id('id') # find_element_by_tag_name('tag') # find_element_by_class_name('class') # find_element_by_css_selector('#css>div.selector') # find_element_by_xpath('/html/body/some/xpath') 

해당하는 jupyter notebook 소스 첨부합니다.

myWebCrawling.ipynb
0.01MB

도움이 되었다면 아래▼▼▼ 공감하트 클릭, 응원댓글 부탁드립니다.(공감과 댓글은 로그인이 필요 없어요)
감사합니다.

반응형

댓글