베스트 258 파이썬 크롤링 Selenium 새로운 업데이트 84 분 전

주제에 대한 기사를 찾고 있습니까 “파이썬 크롤링 selenium“? 웹사이트에서 이 주제에 대한 전체 정보를 제공합니다 k1.krabirelaxytour.com 탐색에서: https://k1.krabirelaxytour.com/blog. 바로 아래에서 이 주제에 대한 자세한 답변을 찾을 수 있습니다. 찾고 있는 주제를 더 잘 이해하려면 끝까지 읽으십시오. 더 많은 관련 검색어: 파이썬 크롤링 selenium Selenium 크롤링 예제, Selenium Python, 파이썬 셀레니움 텍스트 추출, Python Selenium 동적 크롤링, Selenium 사용법, Selenium find_element, Selenium execute_script, Python selenium 예제

7) 동적 웹크롤링 – selenium으로 화면 조작하기

# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3)

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식) search_box = driver.find_element_by_css_selector(‘input.gLFyf.gsfi’) # 검색어 창을 찾아 search 변수에 저장 (xpath 이용방식) search_box = driver.find_element_by_xpath(‘//*[@id=”google_search”]’)

<여기서 잠깐> 갑자기 xpath가 나와서 당황스러우시겠지만 둘 다 같은 결과를 수행하는 코드라는 것을 알아두세요. 참고로 xpath는 아까 찾으셨던 html 코드 위에서 ‘우클릭’을 하신 후, 아래 그림과 같이 ‘Copy Xpath’를 클릭하시면 클립보드에 //*[@id=”google_search”] 라는 xpath가 저장되어 있을거예요. 이걸 위의 코드와 같이 넣어주시면 된답니다.

24 thg 10, 2021 — selenium은 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 가능합니다. 예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 …

  • Source: wikidocs.net
  • Views: 109141
  • Publish date: 10 minute ago
  • Downloads: 60586
  • Likes: 9035
  • Dislikes: 1
  • Title Website: 7) 동적 웹크롤링 – selenium으로 화면 조작하기
  • Description Website: 24 thg 10, 2021 — selenium은 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 가능합니다. 예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 …

세부 정보를 보려면 여기를 클릭하십시오.

  • Source: Youtube
  • Views: 43508
  • Date: 28 minute ago
  • Download: 32570
  • Likes: 5618
  • Dislikes: 8

7) 동적 웹크롤링 – selenium으로 화면 조작하기

Selenium으로 화면 조작하기

selenium은 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 가능합니다.

예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 거쳐야 한다거나, 유튜브 댓글을 모두 크롤링하는데 스크롤을 내려야지 댓글이 추가적으로 업데이트 되는 상황이 있겠죠.

이런 상황에서 원하는 버튼을 클릭 하거나 문자를 입력하는 등의 컴퓨터가 해주어야 하는데 이를 Selenium 패키지가 대신 해줄 수 있습니다.

쉽게 말해서 웹 브라우저용 매크로랄까요?

Selenium으로 화면을 조작하는 전체적인 개념은 다음과 같습니다.

<개념>

1) 조작을 원하는 버튼이나 입력창의 html을 파악

2) 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

find_element_by_css_selector( )

find_element_by_xpath( )

3) 기능 동작 관련 함수로 원하는 기능 조작

클릭 : .click( )

키 입력: .send_keys( )

원하는 키워드를 검색하는 아주 간단한 예제를 통해서 어떤 방식으로 사용하는지 보여드리겠습니다.

1단계. 원하는 버튼의 html 타겟팅

가장 먼저 해줄 일은 크롬을 실행해서 F12를 누르는 것 부터 시작합니다.

F12를 누르면 지난 강의에서 배우셨 듯이 웹 브라우저 우측에 ‘개발자 도구’가 나타날 거예요. 그러면 개발자 도구 상단의 화살표 버튼을 눌러서 조작을 원하는 부분을 클릭해주세요.

검색창에 원하는 키워드를 입력하고 앤터를 눌러주는 것이 이번 예제의 목적이므로 검색창을 타겟팅 할 수 있도록 속성 HTML/CSS 강의 시간에 공부 하셨던 ‘CSS Selector’ 개념을 이용해보겠습니다.

방금 전까지 잘 따라오셨다면 아마 개발자 도구에 ‘검색창’의 html 부분이 나타나 있을텐데요. 우선 빨간색으로 표시된 class 속성값 부분을 더블클릭해서 복사(Ctrl+c)를 해주세요.

<여기서 잠깐> class명이 gLFyf gsfi인 input 태그를 선택하려면, input.gLFyf.gsfi라고 입력해주어야 합니다. 1) input 바로 뒤의 점(.)은 class를 나타냄 (id라면 . 대신 #이 들어감) 2) gLFyf 바로 뒤의 점(.)은 띄어쓰기를 의미하며, 띄어쓰기를 모르는 컴퓨터를 위한 것임

여기까지 따라오셨다면 이제 코딩창으로 넘어가서 원하는 조작을 수행해 보겠습니다.

2단계. Selenium으로 타겟팅한 html 찾기

그 다음으로 해줄 일은 Selenium의 find_elements_by_css_selector( ) 함수로 위에서 가져온 선택자(input.gLFyf.gsfi)를 ( ) 안에 넣어서 크롬 드라이버가 알아먹을 수 있게 변환해주는 것입니다.

그 전에 먼저 관련 모듈을 import 해주고, 구글 드라이버를 이용해 ‘Google’까지 접속해줍시다. 아래 코드에 주석을 달아두었으니 그리 어렵진 않으실거예요.

# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3)

자, 이제 find_elements_by_css_selector( ) 함수로 chromedriver가 검색창을 찾을 수 있게 해봅시다.

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식) search_box = driver.find_element_by_css_selector(‘input.gLFyf.gsfi’) # 검색어 창을 찾아 search 변수에 저장 (xpath 이용방식) search_box = driver.find_element_by_xpath(‘//*[@id=”google_search”]’)

<여기서 잠깐> 갑자기 xpath가 나와서 당황스러우시겠지만 둘 다 같은 결과를 수행하는 코드라는 것을 알아두세요. 참고로 xpath는 아까 찾으셨던 html 코드 위에서 ‘우클릭’을 하신 후, 아래 그림과 같이 ‘Copy Xpath’를 클릭하시면 클립보드에 //*[@id=”google_search”] 라는 xpath가 저장되어 있을거예요. 이걸 위의 코드와 같이 넣어주시면 된답니다.

어렵지 않죠? html에 class나 id가 없어 타겟팅 하기 어려운 경우에 자주 사용하니 꼭 알아두시면 좋을 것 같아요!

3단계. 원하는 조작 수행

여기까지 하셨으면 Chromedriver가 Selenium 패키지의 find_element 함수를 이용해서 원하는 html을 찾은 상태입니다.

이제 남은 일은 원하는 조작을 수행하도록 명령 내리는 일입니다.

명령은 간단합니다. 클릭하거나 원하는 키를 입력해주는 것 2가지 입니다.

클릭 : .click( )

키 입력: .send_keys( )

그럼 간단히 어떻게 코드로 적용할 수 있는지 알아보겠습니다.

search_box.send_keys(‘파이썬’) search_box.send_keys(Keys.RETURN) time.sleep(1)

사용법 역시 정말 간단합니다.

아까 찾았던 검색창(search_box) 변수 다음에 .send_keys(‘검색어’)를 넣어주면 아래와 같은 상태가 되겠죠?

그 다음에 search_box.send_keys(Keys.RETURN)을 입력해주면 우리가 검색어를 치고 ‘엔터키’를 입력해주는 것과 동일합니다.

참고로 그림에서 Google 검색 버튼을 우리가 했던 방식으로 타겟팅 해주고 .click( ) 함수로 ‘마우스 클릭’ 해주어도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있습니다.

# click 함수는 ()안에 아무것도 넣지 않으면 좌클릭을 수행 search_button.click()

이 부분은 여러분들의 실습 과제로 남겨두겠습니다.

셀레니움 크롤러 기본 사용법 – 뻥뚫리는 파이썬 코드 모음

driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]’) #xpath 로 접근 driver.find_element_by_class_name(‘ico_search_submit’) #class 속성으로 접근 driver.find_element_by_id(‘ke_kbd_btn’) #id 속성으로 접근 driver.find_element_by_link_text(‘회원가입’) #링크가 달려 있는 텍스트로 접근 driver.find_element_by_css_selector(‘#account > div > a’) #css 셀렉터로 접근 driver.find_element_by_name(‘join’) #name 속성으로 접근 driver.find_element_by_partial_link_text(‘가입’) #링크가 달려 있는 엘레먼트에 텍스트 일부만 적어서 해당 엘레먼트에 접근 driver.find_element_by_tag_name(‘input’) #태그 이름으로 접근 driver.find_element_by_tag_name(‘input’).find_element_by_tag_name(‘a’) #input 태그 하위태그인 a 태그에 접근 driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]’).find_element_by_name(‘join’) #xpath 로 접근한 엘레먼트의 안에 join 이라는 속성을 가진 tag 엘레먼트에 접근

6 thg 9, 2022 — selenium에 대해 문의 드립니다. 예를들어 크롬으로 네이버를 수동으로 로그인 하였습니다. 이 창을 selenium으로 연결하여 그대로 사용할수 있을까요?

  • Source: pythondocs.net
  • Views: 1974
  • Publish date: 4 minute ago
  • Downloads: 48893
  • Likes: 7218
  • Dislikes: 6
  • Title Website: 셀레니움 크롤러 기본 사용법 – 뻥뚫리는 파이썬 코드 모음
  • Description Website: 6 thg 9, 2022 — selenium에 대해 문의 드립니다. 예를들어 크롬으로 네이버를 수동으로 로그인 하였습니다. 이 창을 selenium으로 연결하여 그대로 사용할수 있을까요?

세부 정보를 보려면 여기를 클릭하십시오.

파이썬 셀레니움 맛보기 네이버 크롤링 – beautifulsoup, selenium 기초

  • Source: Youtube
  • Views: 40768
  • Date: 1 hours ago
  • Download: 45176
  • Likes: 6450
  • Dislikes: 2

셀레니움 크롤러 기본 사용법

셀레니움 전반에 관하여 간략하게 정리한다. 이 문서는 셀레니움 버전 3 기준이다. 최근 4버전이 출시되었으나 사용방법이 약간 다르니 이 부분을 확인하길 바란다. 사용 방법이나 예시는 따로 링크를 남기고 꾸준히 업데이트 하도록 하겠다. 아래 기능들만 익히면 웹상의 원하는 거의 대부분의 업무의 자동화가 가능할 것이다. 이하는 최신버전을 기준으로 코드를 정리하였다.

셀레니움 소개

셀레니움은 파이어폭스, 인터넷 익스플로어, 크롬등과 같은 브라우저를 컨트롤 할 수 있게 해줍니다. 현재 파이썬 3.5 이상부터 지원되며 3.6 이상 버전 부터 pip 로 표준 라이브러리로 사용할 수 있습니다.

설치 – install

pip install selenium

드라이버 – driver

브라우저 열기 (chrome)

from selenium import webdriver driver = webdriver.Chrome(‘chromedriver.exe’)

권장 브라우저 열기 코드

브라우져 열기 옵션 넣기

크롬 브라우저를 열 때 넣을 수 있는 옵션을 셀레니움에서도 사용이 가능하다.

윈도우 사이즈

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument(‘window-size=1920,1080’) driver = webdriver.Chrome(‘chromedriver.exe’, options=options)

헤들리스

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument(‘headless’) driver = webdriver.Chrome(‘chromedriver.exe’, options=options)

창 최대화

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument(‘start-maximized) driver = webdriver.Chrome(‘chromedriver.exe’, options=options) # 또는 driver.maximize_window()

브라우저 닫기

driver.close() #현재 탭 닫기 driver.quit() #브라우저 닫기

뒤로가기 / 앞으로가기

driver.back() #뒤로가기 driver.forward() #앞으로가기

탭 이동

driver.window_handles[0] #브라우저 탭 객체를 리스트로 반환. [0] 은 인덱싱. 첫번재 탭을 의미 driver.switch_to.window(driver.window_handles[0]) #첫번째 탭으로 이동 driver.switch_to.window(driver.window_handles[1]) #두번째 탭으로 이동 driver.switch_to.window(driver.window_handles[2]) #세번째 탭으로 이동

탭 닫기

driver.switch_to.window(driver.window_handles[0]) #닫을 탭으로 이동 후 driver.close()

엘레먼트에 관하여

우리는 웹브라우저에서 로그인도 하고 버튼도 클릭하고 검색창에 텍스트를 입력하기도 한다. 이렇게 브라우저 상에서 보이는 버튼, 검색창, 사진, 테이블, 동영상 등등 이 모든 것들을 엘레먼트(element, 요소) 라고 부른다. 셀레니움은 우리가 브라우저에서 특정 요소를 클릭하고 텍스트를 입력하고 사진등을 받아오고 텍스트를 가져오는 등등 어떠한 위치에 있는 무언가를 부를 때 엘레먼트라는 개념으로 접근한다. 다양한 방법으로 엘레먼트로 접근할 수 있는데 대부분 xpath 를 사용한다.

엘레먼트 접근하는 방법

driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]’) #xpath 로 접근 driver.find_element_by_class_name(‘ico_search_submit’) #class 속성으로 접근 driver.find_element_by_id(‘ke_kbd_btn’) #id 속성으로 접근 driver.find_element_by_link_text(‘회원가입’) #링크가 달려 있는 텍스트로 접근 driver.find_element_by_css_selector(‘#account > div > a’) #css 셀렉터로 접근 driver.find_element_by_name(‘join’) #name 속성으로 접근 driver.find_element_by_partial_link_text(‘가입’) #링크가 달려 있는 엘레먼트에 텍스트 일부만 적어서 해당 엘레먼트에 접근 driver.find_element_by_tag_name(‘input’) #태그 이름으로 접근 driver.find_element_by_tag_name(‘input’).find_element_by_tag_name(‘a’) #input 태그 하위태그인 a 태그에 접근 driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[3]/form/fieldset/button/span[2]’).find_element_by_name(‘join’) #xpath 로 접근한 엘레먼트의 안에 join 이라는 속성을 가진 tag 엘레먼트에 접근

엘레먼트 클릭

driver.find_element_by_id(‘ke_kbd_btn’).click()

텍스트 입력

driver.find_element_by_id(‘ke_awd2_btn’).send_keys(‘텍스트 입력’)

텍스트 삭제

driver.find_element_by_id(‘ke_awd2_btn’).clear()

단축키 입력

from selenium.webdriver.common.keys import Keys # 컨트롤+V driver.find_element_by_id(‘ke_kbd_btn’).send_keys(Keys.CONTROL + ‘v’) # 다른 방법 from selenium.webdriver import ActionChains ActionChains(driver).key_down(Keys.CONTROL).send_keys(‘V’).key_up(Keys.CONTROL).perform() #위에서 driver 대신 엘리먼트를 입력해도 좋음.

Frame 이동

#이동할 프레임 엘리먼트 지정 element = driver.find_element_by_tag_name(‘iframe’) #프레임 이동 driver.switch_to.frame(element) #프레임에서 빠져나오기 driver.switch_to.default_content()

경고창 (alert)

경고창이 떴을 때 수락 또는 거절을 눌러주거나 경고창의 텍스트를 가져올 수 있다.

경고창 이동

#경고창으로 이동 driver.switch_to.alert

경고창 수락 / 거절

from selenium.webdriver.common.alert import Alert Alert(driver).accept() #경고창 수락 누름 Alert(driver).dismiss() #경고창 거절 누름 print(Alert(driver).text # 경고창 텍스트 얻음

쿠키 값 얻기

#쿠키값 얻기 driver.get_cookies() #쿠키 추가 driver.add_cookie() #쿠키 전부 삭제 driver.delete_all_cookies() #특정 쿠기 삭제 driver.delete_cookie(cookiename)

자바스크립트 코드 실행

자바스크립트를 실행할 수 있다. 자주 그리고 많이 사용하는 자바스크립트 몇개를 알아본다.

스크롤 이동

#브라우저 스크롤 최하단으로 이동 driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight);’) # CSS 셀렉터로 클릭 driver.execute_script(“document.querySelector(‘body > div.modal-options__buttons > button.btn.btn-primary’).click();”) #또는 elemToclick = driver.~~~ driver.execute_script(‘arguments[0].click();’, elemToclick) # driver.find_element_by_css_selector(~~).click() 과 동일하나 이 코드가 작동하지 않을시 자바스크립트 코드를 시도해볼만하다. # 스크롤 특정 엘리먼트로 이동 element = driver.find_element_by_css_selector(‘div > a’) driver.execute_script(‘arguments[0].scrollIntoView(true);’, element)

새 탭 열기

# Opens a new tab and switches to new tab driver.switch_to.new_window(‘tab’) # Opens a new window and switches to new window driver.switch_to.new_window(‘window’)

스크린샷

#캡쳐할 엘레먼트 지정 element = driver.driver.find_element_by_class_name(‘ico.search_submit’) #캡쳐 element.save_screenshot(‘image.png’)

뒤로가기 앞으로가기

# 뒤로가기 driver.back() #앞으로 가기 driver.forward()

예외처리 – Exceptions

from selenium.common.exceptions import NoAlertPresentException, NoSuchElementException, TimeoutException, ElementNotInteractableException,NoSuchWindowException, NoSuchFrameException # NoAlertPresentException 경고창 관련 명령어를 실행했으나 현재 경고창이 뜨지 않음 # NoSuchElementException 엘레먼트 접근하였으나 없음 # TimeoutException 특정한 액션을 실행하였으나 시간이 오래 지나도록 소식이 없음 # ElementNotInteractableException 엘리먼트에 클릭등을 하였으나 클릭할 성질의 엘리먼트가 아님 # NoSuchWindowException 해당 윈도우 없음 # NoSuchFrameException 해당 프레임 없음

shadow DOM 처리

#shadow dom 엘레먼트 열어주는법 element = driver.execute_script(“return document.querySelector(‘#syndi_powerpage > div’).shadowRoot”).get_attribute(‘innerHTML’) # css Selector 이용 # element 의 HTML 내용 return # shadow dom 처리를 통한 크롬 인터넷 기록 삭제 def expand_shadow_element(element): shadow_root = driver.execute_script(‘return arguments[0].shadowRoot’, element) return shadow_root driver.get(‘chrome://settings/clearBrowserData’) elem = driver.find_element_by_css_selector(‘body > settings-ui’) elem1 = expand_shadow_element(elem) elem1 = elem1.find_element_by_id(‘main’) elem2 = expand_shadow_element(elem1) elem2 = elem2.find_element_by_tag_name(‘settings-basic-page’) elem3 = expand_shadow_element(elem2) elem3 = elem3.find_element_by_tag_name(‘settings-privacy-page’) elem4 = expand_shadow_element(elem3) elem4 = elem4.find_element_by_tag_name(‘settings-clear-browsing-data-dialog’) elem5 = expand_shadow_element(elem4) elem5forconfirmelem = expand_shadow_element(elem4) # 인터넷 사용기록 삭제버튼 클릭을 위한 엘레먼트 따로 빼놓기 elem5 = elem5.find_element_by_id(‘clearFromBasic’) elem6 = expand_shadow_element(elem5) elem6 = elem6.find_element_by_id(‘dropdownMenu’) elem6.find_element_by_css_selector(‘option[value=”4″]’).click() # 전체기간 선택 elem5forconfirmelem.find_element_by_id(‘clearBrowsingDataConfirm’).click() # 인터넷 사용기록 삭제버튼 클릭

XHR 데이터 확인

from selenium.webdriver import DesiredCapabilities import json capabilities = DesiredCapabilities.CHROME capabilities[“goog:loggingPrefs”] = {“performance”: “ALL”} # newer: goog:loggingPrefs try: s = Service(f’./{chrome_ver}/chromedriver.exe’) driver = webdriver.Chrome(service=s, options=option, desired_capabilities=capabilities) except: chromedriver_autoinstaller.install(True) s = Service(f’./{chrome_ver}/chromedriver.exe’) driver = webdriver.Chrome(service=s, options=option, desired_capabilities=capabilities) driver.implicitly_wait(7) driver.get(‘blablablabla~~~’) logs_raw = driver.get_log(“performance”) logs = [json.loads(lr[“message”])[“message”] for lr in logs_raw] def log_filter(log_): return ( # is an actual response log_[“method”] == “Network.responseReceived” # and json and “json” in log_[“params”][“response”][“mimeType”] ) for log in filter(log_filter, logs): request_id = log[“params”][“requestId”] resp_url = log[“params”][“response”][“url”] print(f”Caught {resp_url}”) print(driver.execute_cdp_cmd(“Network.getResponseBody”, {“requestId”: request_id}))

# 2021. 1. 1. uploaded

# 2021. 02. 21. updated

# 2021. 08. 09. updated

# 2021. 08. 15. updated

# 2021. 08. 23. updated

# 2022. 03. 16. updated

[생존형 튜토리얼] 파이썬 selenium으로 데이터 크롤링

import os import sys import json from collections import OrderedDict from time import sleep from selenium import webdriver from category_list import beauty_list, health_food_list, life_list goods_list = { ‘beauty_list’: beauty_list, ‘health_food_list’: health_food_list, ‘life_list’: life_list } # 크롬드라이버 위치 절대경로로 설정 driver = webdriver.Chrome(“C:\\Python38\\chromedriver”) url = ‘https://www.oliveyoung.co.kr/store/display/getMCategoryList.do?dispCatNo=’ data = OrderedDict()

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, “myDynamicElement”)) ) finally: driver.quit()

health_food_list = { ‘health_hygeine’: { ‘dentalcare’: { ‘toothbrush’: ‘1000002000300010001’, ‘toothpaste’: ‘1000002000300010002’ }, ‘eyecare’: { ‘lenscare’: ‘1000002000300020001’, ‘lenssterilizer’: ‘1000002000300020002’ } }, ‘healthfood’: { ‘vitamin’: { ‘complex’: ‘1000002000100060001’ } } }

15 thg 2, 2021 — 예전에는 beautifulsoup4를 이용해서 크롤링을 했는데, 이번에는 selenium으로 하기로 했습니다. 당장 필요한 코드를 짜기 위해 필수적인 사용법만 …

  • Source: dev-dain.tistory.com
  • Views: 109717
  • Publish date: 46 minute ago
  • Downloads: 71309
  • Likes: 85
  • Dislikes: 8
  • Title Website: [생존형 튜토리얼] 파이썬 selenium으로 데이터 크롤링
  • Description Website: 15 thg 2, 2021 — 예전에는 beautifulsoup4를 이용해서 크롤링을 했는데, 이번에는 selenium으로 하기로 했습니다. 당장 필요한 코드를 짜기 위해 필수적인 사용법만 …

세부 정보를 보려면 여기를 클릭하십시오.

파이썬 셀레니움 이미지 크롤링으로 배우는 업무 자동화의 기초

  • Source: Youtube
  • Views: 92583
  • Date: 21 hours ago
  • Download: 61135
  • Likes: 9917
  • Dislikes: 6

[생존형 튜토리얼] 파이썬 selenium으로 데이터 크롤링

예전에는 beautifulsoup4를 이용해서 크롤링을 했는데, 이번에는 selenium으로 하기로 했습니다.

당장 필요한 코드를 짜기 위해 필수적인 사용법만 익히고 바로 사용했습니다.

beautifulsoup4와 셀렉팅하는 방식이 유사해서 사용하는 게 그리 어렵지는 않았네요.

아래의 글 두 개를 참고해서 코드를 짰습니다.

Python Selenium 사용법 [파이썬 셀레늄 사용법, 크롤링]

나만의 웹 크롤러 만들기(3): Selenium으로 무적 크롤러 만들기

초기 목표는 올리브영 상품 크롤링이었지만 올리브영 홈페이지의 robots.txt를 까본 결과.. 구글과 네이버 크롤러 외의 다른 봇은 전체 페이지 크롤링 disallow하는 바람에 랄라블라로 돌리기로 했습니다.

그래서 원래 짜둔 올리브영 크롤링 코드는 역사의 뒤안길(?)로 사라지게 두기로 했습니다.

어떤 홈페이지 타겟으로 크롤링을 하실 때는 반드시 해당 홈페이지의 robots.txt를 확인하고, user-agent *에서 allow가 되어 있는 부분만 크롤링하도록 합시다. 아직은 권고 사항 정도라서 큰 효력을 갖지는 않고, 학습 용도라면 크롤링을 눈 감아주는 분위기지만 너무 어뷰징해서 트래픽 폭주하면 문제의 소지가 될 수 있습니다.

랄라블라 크롤링은 다른 팀원 분께 맡겨서 현재 제가 코드가 없는 고로.. 일단 올리브영 홈페이지를 타겟으로 한 코드를 예제로 쓰겠지만, 따라하진 마시고 문법 위주로 보시길 바랍니다.

목표

입력 : 상품 카테고리 코드(String)

출력 : 해당 상품 카테고리 아래 상품 목록에 든 상품이 정보가 든 JSON 파일

상품 하나당 상품의 정보가 담긴 json 파일 한 개가 산출되는 것을 목표로 했습니다.

가령 제가 상품 번호가 A000000105563인 상품을 크롤링하면 해당 상품이 속한 카테고리를 나타내는 디렉터리 밑에 A000000105563.json이라는 파일이 만들어지도록 했습니다.

이 json 파일에는 상품 번호, 이름, 브랜드, 카테고리, 이미지, 상품 설명, 별점, 리뷰 개수, 할인가, 정가, 옵션 개수, 옵션의 이름, 옵션의 가격, 옵션의 이미지 목록 등이 들어 있습니다.

준비

파이썬 3 / selenium 설치, chromedriver 다운로드

필자 환경

Windows 10 64비트

파이썬 3.8.3

크롬 88.0.4324.182

selenium 설치는 그다지 어렵지 않습니다. 도움이 필요하다면 이 글을 참고하세요. 이 글은 chromedriver 다운로드까지 한 큐에 다루고 있으므로 보기 좋습니다.

저는 같은 디렉터리에 category_list.py 라는 파일이 있고, 여기에 beauty_list, health_food_list, life_list라는 거대한 딕셔너리가 있습니다. 카테고리 분류를 위해 따로 분리해둔 건데, 이 안에는 각 소분류 카테고리별로 어떤 코드를 갖고 있는지가 적혀 있습니다.

이런 식으로 depth가 좀 있게 구성이 되어 있는데요.

health_food_list = { ‘health_hygeine’: { ‘dentalcare’: { ‘toothbrush’: ‘1000002000300010001’, ‘toothpaste’: ‘1000002000300010002’ }, ‘eyecare’: { ‘lenscare’: ‘1000002000300020001’, ‘lenssterilizer’: ‘1000002000300020002’ } }, ‘healthfood’: { ‘vitamin’: { ‘complex’: ‘1000002000100060001’ } } }

종합 비타민의 경우 health_food_list[‘health_food’][‘vitamin’][‘complex’]로 코드값을 찾을 수 있게 됩니다.

드라이버가 알아서 카테고리 코드를 바꿔가며 크롤링하길 바라는 마음에서 코드값을 찾아 다 분류를 해 놨습니다.

다음과 같이 작성했습니다.

import os import sys import json from collections import OrderedDict from time import sleep from selenium import webdriver from category_list import beauty_list, health_food_list, life_list goods_list = { ‘beauty_list’: beauty_list, ‘health_food_list’: health_food_list, ‘life_list’: life_list } # 크롬드라이버 위치 절대경로로 설정 driver = webdriver.Chrome(“C:\\Python38\\chromedriver”) url = ‘https://www.oliveyoung.co.kr/store/display/getMCategoryList.do?dispCatNo=’ data = OrderedDict()

json 포맷 사용을 위해 json 모듈을 import하고, 저장하고, json 파일마다 같은 순서 포맷대로 구성하기 위해 OrderedDict를 사용합니다.

selenium에서 webdriver import도 했구요.

일단 driver 변수로 웹드라이버를 가져오는 게 먼저인데요. 크롬 드라이버가 있는 위치를 절대경로 path로 주시면 됩니다. 그런 다음 여러 페이지를 돌아다녀도 변하지 않는 고정 URL을 미리 url 변수에 할당해 두시구요. data는 OrderedDict로 하나 만듭니다. 이 data 내용이 곧 json 파일 내용이 됩니다.

다른 페이지로 실습하실 분들은 이 정도만 쓰셔도 될 것 같습니다.

from selenium import webdriver # 크롬드라이버 위치 절대경로로 설정 driver = webdriver.Chrome(‘path’) url = ‘경로’ driver.get(url)

사용법

전체 코드를 다루지 않고 문법 위주로 어떻게 사용하는지를 좀 보여 드리겠습니다.

(1) 웹페이지 열기

driver.get(url+code)

driver.get(URL)을 하면 URL을 열게 됩니다. chromedriver를 웹드라이버로 썼으니 크롬으로 열립니다.

(2) 대기

(2) – 가. 암묵적 대기 (implicitly_wait)

from selenium import webdriver driver = webdriver.Chrome(‘path’) driver.implicitly_wait(10) # seconds driver.get(“http://somedomain/url_that_delays_loading”) myDynamicElement = driver.find_element_by_id(“myDynamicElement”)

driver.implicitly_wait(sec)는 웹드라이버에게 DOM에 당장은 잡히지 않는 어떤 요소(들)를 찾기까지, 즉 NoSuchElementException을 던지기 전에 좀 기다려 보라고 초 단위의 시간을 줍니다. 기본 셋팅은 0입니다.

이 코드는 driver.get 이후 myDynamicElement라는 요소를 찾기까지 10초간 시간을 주게 됩니다. 10초가 되기 전 찾으면 대기는 끝납니다. 하지만 10초가 넘어가도 DOM 요소가 로드되지 않는 경우에는 NoSuchElementException 에러가 나면서 프로그램이 뻗게 됩니다. 이런 경우를 대비해 try-except로 감싸 주거나 시간을 조금 늘리는 것이 좋겠습니다.

(2) – 나. 명시적 대기

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, “myDynamicElement”)) ) finally: driver.quit()

문서에 있는 명시적 대기의 예제입니다. implicitly_wait과 달리 By, WebDriverWait, expected_conditions 모듈을 추가로 import해줘야 합니다. explicitly_wait라는 메소드가 따로 존재하는 것이 아니라서 이런 포맷으로 쓰게 됩니다. WebDriverWait와 ExpectedCondition 조합만이 명시적 대기를 할 수 있는 유일한 조합이라고 합니다.

요지는, 더 진행시키기 전 어떤 특정 조건 을 만족하도록 기다리라고 지시하는 것입니다. 위의 경우, driver.get 이후 웹 드라이버는 myDynamicElement라는 id를 가진 요소를 찾을 때까지 10초 안에 찾을 때까지 대기하게 됩니다. 해당 시간 내로 찾지 못하면 TimeoutException 에러가 발생하고요. 에러가 나든 나지 않든 driver가 닫히게 됩니다.

기본적으로, WebDriverWait는 until 안의 문장이 성공적으로 실행되기 전까지 0.5초마다 ExpectedCondition을 호출하게 됩니다. ExpectedCondition은 성공할 때 true, 엘리먼트 찾기를 실패했을 때는 null이 아닌 뭔가를 return하게 됩니다.

(2) – 다. 지정 시간만큼 무조건 대기 time.sleep()

#sleep1.py import time for i in range(10): print(i) time.sleep(1)

‘점프 투 파이썬’의 sleep 예제입니다. 0부터 9까지 1초마다 숫자를 1씩 늘려가며 출력하는 예제인데요.

위와 같이 time.sleep(n)은 인자로 들어가는 시간 n초를 쉬게 됩니다.

간단한 코드이지만, 기다릴 수 있는 제한 시간을 주고 중간에 찾으면 바로 대기를 끝나고 돌아가는 implicitly_wait과 달리 무조건 쉬기 때문에 굉장히 비효율적이라고 할 수 있습니다.

(3) 셀렉팅 (find_element_by / find_elements_by)

(3) – 가. xpath로 찾기 (find_element_by_xpath)

items = driver.find_elements_by_xpath(‘//li[@criteo-goods]’)

XPath가 뭔가 하고 검색해 보면 확장 생성 언어(XML)의 구조를 통해 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 언어라고 설명이 돼 있는데요. 쉽게 말하면 XML 문서에서 특정 요소, 부분의 위치를 찾을 때 쓰는 언어 입니다. HTML 문서에서도 요소를 찾을 수 있습니다.

저는 웬만하면 클래스나 id로 셀렉팅하기를 좋아하는데, 타겟 태그에 특이한 클래스나 id 없이 데이터 속성만 떨렁 있으면 찾기가 힘들어 좀 난처했습니다. 이럴 때 쓰기 좋은 게 xpath인 것 같아요.

위의 경우에는 문서 내의 위치와 상관없이 모든 li 태그(//li), 그 중에서도 criteo-goods라는 속성([@criteo-goods])을 가진 태그들만 셀렉팅해 items에 넣어 줍니다.

실제로 세부 카테고리의 상품 리스트들을 볼 수 있는 페이지에는 criteo-goods라는 li 태그로 각 상품을 감싸고 있었습니다.

보시면 criteo-goods는 문서에서 25개가 검색되고 있는데요. 나머지 한 개는 태그로 들어가는 게 아니라 스크립트 코드여서 상관 없고, 24개만 criteo-goods 데이터 속성을 가진 li 태그들이었습니다. 24개인 이유는 상품 리스트에서 한 페이지에 노출되는 상품 개수가 24개라서 그렇습니다. 36, 48개로 바꿀 수 있는데 이 숫자를 바꾸면 criteo-goods를 가진 태그도 따라서 늘어납니다.

xpath를 잘 쓰면 이렇게까지도 쓸 수 있는데요.

item = driver.find_element_by_xpath( ‘//*[@id=”Contents”]/ul[%s]/li[%s]/div/a’ % ((count // 4) + 2, (count % 4) + 1) )

이것을 해석해 보면

문서 내의 위치와 상관없이(//)

id가 Contents인 모든 요소 아래(*[@id=”Contents”]/)

count//4+2번째 ul 태그 아래 (ul[%s]/)

count%4+1번째 li 태그 아래 (li[%s]/)

div 밑의 a 태그(div/a)

가 item에 들어가게 됩니다.

코드와 함께 XPath가 맞는지 보세요

사실 ul 태그에는 cate_prd_list라는 클래스가 붙어 있긴 했지만, 소 카테고리의 한 페이지에서 count를 늘려 가며 그 count를 이용해 수집해야 할 상품의 위치를 추적하는 게 더 효율적이라는 생각이 들어서 저렇게 구성하게 됐습니다.

XPath, 모르면 헷갈리기 쉬운데(제가 그랬습니다) 개발자 도구 열고 문서 내에서 원하는 요소에서 Copy XPath 해 주면 복사해주긴 합니다. 여기서 조금만 바꾸면 되구요. ^^

(3) – 나. id로 찾기 (find_element_by_id)

id로는 다음과 같이 찾을 수 있습니다.

img = driver.find_element_by_id(‘mainImg’)

너무 당연한 얘기지만 HTML 문서에서 특정 id를 가진 요소는 단 1개뿐입니다. 그렇기 때문에 find_element_by_id로만 찾으셔야 합니다. 위의 코드의 경우, 문서에서 mainImg라는 id를 가진 요소를 찾아 img에 할당합니다.

(3) – 다. 클래스 이름으로 찾기 (find_element_by_class_name)

클래스 이름으로는 다음과 같이 찾을 수 있습니다.

# 요소 한 개만 찾기 number = driver.find_element_by_class_name(‘prd_btn_area > .btnZzim’) # 여러 요소 찾기 cat = driver.find_elements_by_class_name(‘loc_history > li > .cate_y’)

위의 경우 number에는 전체 문서에서 prd_btn_area를 클래스로 가진 제일 첫 요소를 찾고, 그 요소 바로 밑에 있는 btnZzim 클래스가 붙은 요소가 할당됩니다. number를 찍어보면 WebElement 타입으로 나오게 됩니다.

cat에는 전체 문서에서 loc_history 클래스인 요소 밑의 li 태그 밑의 cate_y 클래스가 붙은 모든 요소들이 할당됩니다. 그래서 cat은 찍어 보면 list 타입으로 나옵니다.

막간을 이용한 팁 제공 – 자식/자손 요소 찾기

beautifulsoup4로 셀렉팅을 해 보신 분이라면 ‘>’가 익숙하실 텐데요. 만약 요소 셀렉팅을 안 해보신 분이라면 ‘>’는 어떤 요소의 직계 자식(?), 즉 바로 한 depth 밑에 있는 자식 요소를 가리키는 것이라고 알고 계시면 됩니다.

어차피 prd_btn_area나 btnZzim이나 클래스로 찾는 건 매한가진데, 왜 저렇게 쓰는가 궁금해하실 분도 계실 것 같은데요. 이유는 2가지입니다. depth가 너무 깊은 데에 묻혀 있거나 btnZzim이라는 클래스가 붙은 첫 요소가 제가 찾는 그 요소가 아닐 수도 있기 때문입니다.

제가 큰 컨테이너 요소를 찾고 작은 요소로 좁혀 들어가는 방식을 더 선호해서 그렇기도 합니다. ㅎ

바로 밑에 있는 자식이 아니라 자손 요소를 찾으려면 어떻게 해야 할까요?

item_imgs = driver.find_elements_by_class_name(‘detail_area img’)

간단하게 그냥 띄어서 써주시면 됩니다. item_imgs에는 detail_area를 클래스로 가진 요소 밑의 모든 img 태그들이 할당됩니다.

이 때 주의하실 점은 자식, 자손 요소를 찾을 때 클래스나 id로 찾으시려면 클래스 앞에는 온점(.), id 앞에는 해시(#)를 붙여주셔야 한다 는 점입니다.

# 자식 요소 중 cate_y 클래스인 요소들을 찾기 cat = driver.find_elements_by_class_name(‘loc_history > li > .cate_y’) # 자손 요소 중 special 아이디인 요소 찾기 discount_price = driver.find_element_by_class_name(‘price-2 #special’)

(3) – 라. 태그 이름으로 찾기 (find_element_by_tag_name)

태그 이름으로는 다음과 같이 찾을 수 있습니다.

options = driver.find_elements_by_tag_name(‘li > a > div > .option_value’)

options에는 li 태그 아래 a 태그 아래 div 태그 아래 option_value를 클래스로 가진 모든 요소가 할당됩니다.

(4) 요소의 속성 가져오기 (WebElement.get_attribute)

number = driver.find_element_by_class_name(‘prd_btn_area > .btnZzim’)\ .get_attribute(‘data-ref-goodsno’)

find_element_by로 찾은 WebElement.get_attribute(‘attr’) 하면 해당 요소에서 ‘attr’이라는 속성의 value 값을 찾아오게 됩니다.

위의 코드는 문서에서 prd_btn_area가 클래스로 붙은 요소 밑의 btnZzim이 클래스로 붙은 요소에서 ‘data-ref-goodsno’라는 속성의 값을 number에 할당하도록 합니다.

저는 상품 번호를 가져오기 위해 위와 같이 썼습니다.

커스텀 데이터 속성으로 되어 있는 것들, 혹은 img 태그의 src이나 a 태그의 href 속성 같은 것들 다 저렇게 가져오시면 됩니다.

(5) 요소의 텍스트만 가져오기 (WebElement.text)

brand = (driver.find_element_by_class_name(‘prd_brand’)).text

find_element_by로 찾은 WebElement에서 .text를 쓰면 해당 태그 전체가 나오는 게 아니라 텍스트만 아름답게 나오게 됩니다.

(6) 요소 클릭

WebElement.click()

driver.click() 이렇게 쓰시면 안 되구요. driver에서 find_element_by로 찾은 요소를 클릭하는 게 .click() 메소드입니다.

단순하게 클릭하는 기능만 하는데, 태그가 있는 WebElement를 클릭하거나 버튼을 클릭하게 할 수도 있겠죠? 쓰기 나름입니다.

생존을 위한 사용법입니다. 진짜 베이직한 문법들만 담았고, DOM 요소를 조작하셔야 한다면 맨 위에 제가 링크해둔 글 2개를 읽어 보시면 좋겠습니다. 설명이 잘 되어 있고 이해하기도 쉽습니다.

써 보니까 저는 beautifulsoup4보다 selenium 써서 데이터 긁는 게 더 쉬운 것 같네요. 페이지 앞뒤로 이동하면서 끝없이 긁어올 수 있다는 것도 장점이구요. 특히 시간 대기 부분을 살펴보면서 많이 배웠습니다. “재수 없어 NoSuchElement 나오면서 뻗는다”라고 생각했던 부분들은 암묵적 대기가 아니라 명시적 대기로 바꿔야겠다는 생각도 드네요. ㅎ

이 글이 도움이 되셨다면 광고 한 번 클릭 부탁드립니다. ㅎㅎ

References

selenium 문서

XPath란 무엇일까?

점프투파이썬 05-6 라이브러리

Implicit, Explicit, & Fluent Wait in Selenium WebDriver

[Python] Selenium으로 동적 페이지 크롤링하기 – velog

from selenium import webdriver from selenium . webdriver . firefox . service import Service from selenium . webdriver . common . by import By from selenium . webdriver import FirefoxOptions url = “https://gall.dcinside.com/board/view/?id=tree&no=498770&page=1” webdriver_service = Service ( ‘/usr/bin/geckodriver’ ) opts = FirefoxOptions ( ) opts . add_argument ( “–headless” ) browser = webdriver . Firefox ( service = webdriver_service , options = opts ) browser . get ( url ) html_comments = browser . find_elements ( By . CLASS_NAME , “usertxt” ) for comment in html_comments : print ( comment . text )

webdriver를 설정해주어야 한다 : MacOS의 Safari는 자동으로 해주지만, Chrome이나 Firefox는 webdriver_service = Service(‘/usr/bin/geckodriver’) 와 같이 직접 webdriver 를 설정해주어야 한다. –headless 옵션을 주어야 한다 : WSL이나 서버용 ubuntu 의 경우에는 GUI display 가 없다. (X-server 같은 걸 써도 되지만, 귀찮으니까…) 위의 정보들을 이제 webdriver.Firefox() 함수 내에 적절한 인자로 집어넣어주어야 한다.

: Safari 브라우저가 MacOS에 최적화 되어있기도 하지만, Chrome이나 Firefox처럼 뭔가 option 값을 설정해주지 않아도 된다. Linux 혹은 Windows의 WSL(Windows Subsystem for Linux)을 사용하는 Linux Dist를 쓴다면, Chrome browser 보다는 Firefox를 추천한다.

13 thg 7, 2022 — 이제, Selenium을 사용하여 크롤링을 해보자. 만약 MacOS를 쓴다면 무조건 Safari를 쓰는 것을 추천한다. : Safari 브라우저가 MacOS에 최적화 되어있기도 …

  • Source: velog.io
  • Views: 103066
  • Publish date: 2 minute ago
  • Downloads: 37035
  • Likes: 7037
  • Dislikes: 9
  • Title Website: [Python] Selenium으로 동적 페이지 크롤링하기 – velog
  • Description Website: 13 thg 7, 2022 — 이제, Selenium을 사용하여 크롤링을 해보자. 만약 MacOS를 쓴다면 무조건 Safari를 쓰는 것을 추천한다. : Safari 브라우저가 MacOS에 최적화 되어있기도 …

세부 정보를 보려면 여기를 클릭하십시오.

파이썬 구글 크롤링 selenium beautifulsoup 웹스크래핑

  • Source: Youtube
  • Views: 34869
  • Date: 7 minute ago
  • Download: 104360
  • Likes: 1930
  • Dislikes: 3

[Python] Selenium으로 동적 페이지 크롤링하기

0. Intro

Python을 사용하여 Crawling 할 때는, 보통

requests 패키지 beautifulsoup 패키지

이 2개 패키지를 활용하여 대부분 하게 될 것이다.

하지만, 만약에 어떤 값을 크롤링을 하고자 하는데, soup.find(‘div’, class_=’abcd’) 이렇게 해도 도저히 값이 보이지 않는다면? 그 부분은 동적 페이지일 가능성이 매우 크다.

위에서 언급한 2개의 패키지는 정적 페이지 크롤링할 때 사용되는 패키지이다.

하지만, 동적 페이지(ajax, js를 쓰는 경우)는 Selenium 을 사용하여 마치 사람이 직접 개발자 도구에서 보는 방식처럼 크롤링을 할 수 있다.

나는 총 2개의 환경에서 테스트를 해보았다.

Safari (MacOS) Firefox (ubuntu, WSL2의 ubuntu에서도 가능함.)

그리고, 이 게시글의 댓글 부분을 Crawling 할 것이다(dcinside 식물 갤러리) : https://gall.dcinside.com/board/view/?id=tree&no=498770&page=1

(dcinside 제태크 쪽의 글들을 크롤링할 일이 있었는데, dcinside의 posting 자체는 정적 페이지이지만 댓글 부분은 동적 페이지였다.)

참고 – Selenium official docs : https://www.selenium.dev/documentation/

1. Before Development

이제, Selenium을 사용하여 크롤링을 해보자.

만약 MacOS를 쓴다면 무조건 Safari를 쓰는 것을 추천한다.

: Safari 브라우저가 MacOS에 최적화 되어있기도 하지만, Chrome이나 Firefox처럼 뭔가 option 값을 설정해주지 않아도 된다.

: Safari 브라우저가 MacOS에 최적화 되어있기도 하지만, Chrome이나 Firefox처럼 뭔가 option 값을 설정해주지 않아도 된다. Linux 혹은 Windows의 WSL(Windows Subsystem for Linux)을 사용하는 Linux Dist를 쓴다면, Chrome browser 보다는 Firefox를 추천한다.

: Chrome browser를 사용하려고 여러 시도를 해봤지만, 엄청난 오류투성이에 결국 백기를 들고 Firefox를 시도했는데, 10분만에 성공해버렸다…!

1-1. Installation

Selenium 설치는 간단하다. pip install selenium 으로 설치해주자.

그리고, webdriver_manager 패키지도 설치하는 것을 추천한다.

pip install selenium pip install webdriver_manager

python prompt를 켜서 import 와 __version__ 이 잘 되면 설치는 완료된 것이다.

1-2. Crawling 부분 살펴보기

위의 게시글에서, 댓글 부분의 구조를 살펴보자.

이렇게, 개발자 도구(Safari라면 우클릭 > 요소 점검)를 통해서 해당 부분에 대한 html 코드를 살펴볼 수 있다.

살펴보니, 구조가 아래처럼 되어있다.

div tag + comment_box class ul tag + cmt_list class (실제 댓글) p tag + usertxt class

tag + class

이 정도로 구조를 파악하고, 실제 코드를 작성해보자.

2. Development

Selenium 패키지를 사용해서, 어떠한 게시물 내에서 댓글 부분을 전부 가져오는 코드를 작성해보자.

2-1. Safari Browser

첫 번째는 MacOS의 사파리 브라우저 이다.

Safari 브라우저는 기본적으로 webdriver가 기기 자체에 내장되어 있다.

Chrome이나 Firefox는 그 브라우저와 브라우저 버전에 맞는 driver를 다운로드하여 $PATH 부분에 넣어줘야 하는데, Safari는 그럴 필요가 없다.

우리가 해줘야 할 것은 딱 하나가 있다.

Safari 브라우저를 실행하고, 맨 위에 보면 파일, 편집 등의 toolbar가 있는데, 여기에 개발자용 > 원격 자동화 허용 을 켜줘야 한다.

이걸 해주면, 세팅은 끝났다.

코드를 작성해보자.

코드 : seleniumtest.py

from selenium import webdriver url = “https://gall.dcinside.com/board/view/?id=tree&no=498770&page=1” browser = webdriver . Safari ( ) browser . get ( url )

이렇게 작성하고, python seleniumtest.py 를 입력하면 webdriver의 세션이 작동된다.

웹 드라이버가 잘 열리는 것을 확인했으니, 우리가 원하는 댓글을 크롤링해보자.

위의 코드에 아래 부분을 추가해준다.

댓글 크롤링 부분

from selenium . webdriver . common . by import By html_comments = browser . find_elements ( By . CLASS_NAME , “usertxt” ) for comment in html_comments : print ( comment . text )

browser 객체에서 우리가 실제 보고자 하는 댓글은 usertxt 클래스 부분이므로, find_elements 메소드로 해당 부분을 전부 다 가져오도록 하자.

find_elements 는 위의 클래스 이름을 가지고 있는 모든 부분을 가져온다. 이는 list type 을 반환하고,

만약 s 가 없는 find_element 메소드를 사용한다면 해당 클래스 이름을 가진 바로 다음 것 1개만을 가져온다.

는 이는 을 반환하고, 만약 가 없는 메소드를 사용한다면 해당 클래스 이름을 가진 find_elements 부분에서 댓글이 없는 경우에는 빈 리스트가 반환된다.

부분에서 댓글이 없는 경우에는 빈 리스트가 반환된다. html_comments 는 html object 의 일부분이라고 생각하면 된다. 여기서 .text 를 사용해서 실제 text 부분만 가져올 수 있다.

이렇게 해서, Safari browser를 사용하여 동적 크롤링을 할 수 있었다.

2-2. Firefox browser

Firefox는 아마 ubuntu machine에는 자동으로 깔려있겠지만, WSL의 ubuntu의 경우에는 깔려있지 않을 것이다.

sudo apt install firefox 로 firefox부터 설치하자.

그리고 터미널에 firefox 를 쳐서, 터미널에 명령어가 잘 인식이 된다면 firefox 브라우저가 잘 설치된 것이다.

(WSL의 경우에는 DISPLAY가 별도의 작업으로 설정한 것이 아니라면, CLI 화면만 보일것이다. 하지만 크롤링 자체에는 문제가 되지 않는다.)

Firefox는 Safari와 다르게 webdriver를 설치해줘야 된다.

mozilla github 사이트에서 geckodriver 를 다운로드하자.

geckodriver-v0.31.0-linux64.tar.gz 를 다운로드 하면 될 것이다.

해당 압축파일을 다운로드받고, 압축을 풀면 geckodriver 파일이 하나 있는데, 해당 파일을 echo $PATH 를 쳤을 때 나오는 경로에 집어넣어야 한다.

(나는 /usr/bin 아래에 넣어두었다.)

이제 코드를 살펴보자.

코드

from selenium import webdriver from selenium . webdriver . firefox . service import Service from selenium . webdriver . common . by import By from selenium . webdriver import FirefoxOptions url = “https://gall.dcinside.com/board/view/?id=tree&no=498770&page=1” webdriver_service = Service ( ‘/usr/bin/geckodriver’ ) opts = FirefoxOptions ( ) opts . add_argument ( “–headless” ) browser = webdriver . Firefox ( service = webdriver_service , options = opts ) browser . get ( url ) html_comments = browser . find_elements ( By . CLASS_NAME , “usertxt” ) for comment in html_comments : print ( comment . text )

이렇게 하면 firefox로 동적 페이지 크롤링이 가능하다.

(결과는 Safari 때와 동일함.)

Safari와 다른점은

webdriver를 설정해주어야 한다 : MacOS의 Safari는 자동으로 해주지만, Chrome이나 Firefox는 webdriver_service = Service(‘/usr/bin/geckodriver’) 와 같이 직접 webdriver 를 설정해주어야 한다. –headless 옵션을 주어야 한다 : WSL이나 서버용 ubuntu 의 경우에는 GUI display 가 없다. (X-server 같은 걸 써도 되지만, 귀찮으니까…) 위의 정보들을 이제 webdriver.Firefox() 함수 내에 적절한 인자로 집어넣어주어야 한다.

정도가 되겠다.

3. End

이렇게, Safari와 Firefox를 사용해서 동적 페이지 크롤링에 대해서 간단하게 알아보았다.

[Python/Selenium] 파이썬 동적 웹크롤링 – 코딩유치원

# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3)

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식) search_box = driver.find_element_by_css_selector(‘input.gLFyf.gsfi’) # 검색어 창을 찾아 search 변수에 저장 (xpath 이용방식) search_box = driver.find_element_by_xpath(‘//*[@id=”google_search”]’)

<여기서 잠깐> class명이 gLFyf gsfi인 input 태그를 선택하려면, input.gLFyf.gsfi라고 입력해주어야 합니다. 1) input 바로 뒤의 점(.)은 class를 나타냄 (id라면 . 대신 #이 들어감) 2) gLFyf 바로 뒤의 점(.)은 띄어쓰기를 의미하며, 띄어쓰기를 모르는 컴퓨터를 위한 것임

21 thg 10, 2021 — 안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, …

  • Source: coding-kindergarten.tistory.com
  • Views: 77188
  • Publish date: 6 hours ago
  • Downloads: 107840
  • Likes: 2683
  • Dislikes: 5
  • Title Website: [Python/Selenium] 파이썬 동적 웹크롤링 – 코딩유치원
  • Description Website: 21 thg 10, 2021 — 안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, …

세부 정보를 보려면 여기를 클릭하십시오.

Python Selenium 4 latest version of find_element Master of Grammar

  • Source: Youtube
  • Views: 20850
  • Date: 14 hours ago
  • Download: 84439
  • Likes: 5095
  • Dislikes: 8

[Python/Selenium] 파이썬 동적 웹크롤링_selenium으로 화면 조작하기(ft.버튼 클릭, 키 입력, 스크롤 내리기)

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

[웹 크롤링 기초]

2021.03.22 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

[정적 웹크롤링]

2021.03.30 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 – [파이썬 패키지/웹 크롤링] – [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 – [파이썬 패키지/웹 크롤링] – [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

[동적 웹크롤링]

2021.04.03 – [분류 전체보기] – [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 – [파이썬 패키지/웹 크롤링] – [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 – [파이썬 패키지/GUI 프로그램] – [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

오늘은 Selenium으로 원하는 화면 상태에 도달할 수 있도록 웹 브라우저를 조작 하는 법을 공부해보겠습니다.

예를 들어서, 네이버 메일을 확인하기 위해서 로그인 과정을 거쳐야 한다거나, 유튜브 댓글을 모두 크롤링하는데 스크롤을 내려야지 댓글이 추가적으로 업데이트 되는 상황이 있겠죠.

이런 상황에서 원하는 버튼을 클릭 하거나 문자를 입력하는 등의 컴퓨터가 해주어야 하는데 이를 Selenium 패키지가 대신 해줄 수 있습니다.

쉽게 말해서 웹 브라우저용 매크로랄까요?

Selenium으로 화면을 조작하는 전체적인 개념은 다음과 같습니다.

1) 조작을 원하는 버튼이나 입력창의 html을 파악

2) 아래의 두 함수에 html 정보를 입력해서 객체(버튼/입력창 등) 선택

find_element_by_css_selector( )

find_element_by_xpath( )

3) 기능 동작 관련 함수로 원하는 기능 조작

클릭 : .click( )

키 입력: .send_keys( )

원하는 키워드를 검색하는 아주 간단한 예제를 통해서 어떤 방식으로 사용하는지 보여드리겠습니다.

1단계. 원하는 버튼의 html 타겟팅

가장 먼저 해줄 일은 크롬을 실행해서 F12를 누르는 것 부터 시작합니다.

F12를 누르면 지난 강의에서 배우셨 듯이 웹 브라우저 우측에 ‘개발자 도구’가 나타날 거예요. 그러면 개발자 도구 상단의 화살표 버튼을 눌러서 조작을 원하는 부분을 클릭해주세요.

검색창에 원하는 키워드를 입력하고 앤터를 눌러주는 것이 이번 예제의 목적이므로 검색창을 타겟팅 할 수 있도록 ‘CSS Selector’ 개념을 이용해보겠습니다. CSS Selector 개념을 모르신다면 아래의 글을 참고해주세요.

2021.03.27 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

방금 전까지 잘 따라오셨다면 아마 개발자 도구에 ‘검색창’의 html 부분이 나타나 있을텐데요. 우선 빨간색으로 표시된 class 속성값 부분을 더블클릭해서 복사(Ctrl+c)를 해주세요.

<여기서 잠깐> class명이 gLFyf gsfi인 input 태그를 선택하려면, input.gLFyf.gsfi라고 입력해주어야 합니다. 1) input 바로 뒤의 점(.)은 class를 나타냄 (id라면 . 대신 #이 들어감) 2) gLFyf 바로 뒤의 점(.)은 띄어쓰기를 의미하며, 띄어쓰기를 모르는 컴퓨터를 위한 것임

여기까지 따라오셨다면 이제 코딩창으로 넘어가서 원하는 조작을 수행해 보겠습니다.

2단계. Selenium으로 타겟팅한 html 찾기

그 다음으로 해줄 일은 Selenium의 find_elements_by_css_selector( ) 함수로 위에서 가져온 선택자(input.gLFyf.gsfi)를 ( ) 안에 넣어서 크롬 드라이버가 알아먹을 수 있게 변환해주는 것입니다.

그 전에 먼저 관련 모듈을 import 해주고, 구글 드라이버를 이용해 ‘Google’까지 접속해줍시다. 아래 코드에 주석을 달아두었으니 그리 어렵진 않으실거예요.

# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3)

<여기서 잠깐>

혹시 아직 chromedriver를 설치 안하셨다면 아래의 글을 보시고 설치해주셔야 코드가 정상작동 합니다.

2021.03.23 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

그리고 chromedriver의 경로를 어떻게 입력해야할지 모르시겠다면 아래의 글을 참고해주세요.

2021.06.05 – [파이썬 기초/기초 문법] – [Python 기초] 파이썬으로 경로와 디렉토리 다루기(feat. 절대 경로와 상대 경로)

자, 다시 본론으로 돌아와서 find_elements_by_css_selector( ) 함수로 chromedriver가 검색창을 찾을 수 있게 해봅시다.

# 검색어 창을 찾아 search 변수에 저장 (css_selector 이용방식) search_box = driver.find_element_by_css_selector(‘input.gLFyf.gsfi’) # 검색어 창을 찾아 search 변수에 저장 (xpath 이용방식) search_box = driver.find_element_by_xpath(‘//*[@id=”google_search”]’)

갑자기 xpath가 나와서 당황스러우시겠지만 둘 다 같은 결과를 수행하는 코드라는 것을 알아두세요.

참고로 xpath는 아까 찾으셨던 html 코드 위에서 ‘우클릭’을 하신 후, 아래 그림과 같이 ‘Copy Xpath’를 클릭하시면 클립보드에 //*[@id=”google_search”] 라는 xpath가 저장되어 있을거예요. 이걸 위의 코드와 같이 넣어주시면 된답니다.

어렵지 않죠? html에 class나 id가 없어 타겟팅 하기 어려운 경우에 자주 사용하니 꼭 알아두시면 좋을 것 같아요!

3단계. 원하는 조작 수행

여기까지 하셨으면 Chromedriver가 Selenium 패키지의 find_element 함수를 이용해서 원하는 html을 찾은 상태입니다.

이제 남은 일은 원하는 조작을 수행하도록 명령 내리는 일입니다.

명령은 간단합니다. 클릭하거나 원하는 키를 입력해주는 것 2가지 입니다.

클릭 : .click( )

키 입력: .send_keys( )

명령어 기능 Kyes.ENTER

Keys.RETURN 엔터 Keys.SPACE 스페이스 Keys.ARROW_UP

Keys.ARROW_DOWN

Keys.ARROW_LEFT

Keys.ARROW_RIGHT 방향키(상하좌우) Keys.BACK_SPACE

Keys.DELETE

지우기 (벡스페이스)

지우기 (딜리트) Keys.CONTROL

Keys.ALT

Keys.SHIFT

Keys.TAB

자주 사용하는 기능키(Ctrl, Alt, Shift, Tab) Keys.PAGE_UP

Keys.PAGE_DOWN 스크롤 업

스크롤 다운 Keys.F1~9 F1 부터 F9 (F+숫자) Keys.EQUALS, Keys.ESCAPE, Keys.HOME, Keys.INSERT 기타 등등

그럼 간단히 어떻게 코드로 적용할 수 있는지 알아보겠습니다.

search_box.send_keys(‘파이썬’) search_box.send_keys(Keys.RETURN) time.sleep(1)

사용법 역시 정말 간단합니다.

아까 찾았던 검색창(search_box) 변수 다음에 .send_keys(‘검색어’)를 넣어주면 아래와 같은 상태가 되겠죠?

그 다음에 search_box.send_keys(Keys.RETURN)을 입력해주면 우리가 검색어를 치고 ‘엔터키’를 입력해주는 것과 동일합니다.

참고로 그림에서 Google 검색 버튼을 우리가 했던 방식으로 타겟팅 해주고 .click( ) 함수로 ‘마우스 클릭’ 해주어도 엔터키를 입력한 것과 동일한 결과를 얻을 수 있습니다.

# click 함수는 ()안에 아무것도 넣지 않으면 좌클릭을 수행 search_button.click()

이 부분은 여러분들의 실습 과제로 남겨두겠습니다.

오늘 준비한 내용은 여기까지입니다.

오늘도 공부하시느라 고생 많으셨습니다~!

이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!

python으로 크롤링 하기 기초 1- selenium – 알마덴디자인리서치

기업은 내부 데이터를 바탕으로 자신의 상품이나 서비스를 개선하고 분석하지만 개인이 그러한 데이터를 가지기엔 비용과 시간이 충분하지 않습니다. 이 문제에 크롤링은 시간과 비용을 절약해 준다는 점에서 데이터 수집 비용에 대한 좋은 해결책이 될 수 있습니다. 또한 어떠한 페이지든 상관없이 크롤링이 가능하다는 점에서 다양한 정보를 가져올 수 있습니다.

지금부터 파이썬(python)을 활용하여 크롤링 하는 법을 공부하도록 하겠습니다. 우선 셀레니움에 대해서 공부하도록 할게요. 셀레니움은 웹 테스트 자동화 프레임워크로써, selenium webdriver를 이용하여 다양한 브라우저를 컨트롤 할 수 있습니다. 셀레니움은 구글크롬, 파이어폭스 등의 웹드라이버를 통해 작동해요.

options.add_argument(‘user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36’) # user-agent 이름 설정

3시간이면 나만의 데이터가 쌓이는 겁니다. 참쉽죠^^? 파이썬 크롤링. 1. selenium(셀레니움) 이란? 지금부터 파이썬(python) …

  • Source: blog.almaden.co.kr
  • Views: 38952
  • Publish date: 35 minute ago
  • Downloads: 71623
  • Likes: 7478
  • Dislikes: 5
  • Title Website: python으로 크롤링 하기 기초 1- selenium – 알마덴디자인리서치
  • Description Website: 3시간이면 나만의 데이터가 쌓이는 겁니다. 참쉽죠^^? 파이썬 크롤링. 1. selenium(셀레니움) 이란? 지금부터 파이썬(python) …

세부 정보를 보려면 여기를 클릭하십시오.

30만원 짜리 외주 프로그램 만들기 – 파이썬으로 네이버 쇼핑 크롤링하기 1편 (ft. 셀레니움 selenium)

  • Source: Youtube
  • Views: 7410
  • Date: 13 hours ago
  • Download: 44812
  • Likes: 7976
  • Dislikes: 2

python으로 크롤링 하기 기초 1- selenium

크롤링은 시간과 비용을 절약해 준다는 점에서 데이터 수집 비용에 대한 좋은 해결책이 될 수 있습니다. 또한 어떠한 페이지든 상관없이 크롤링이 가능하다는 점에서 다양한 정보를 가져올 수 있습니다.

안녕하세요 알마덴에서 데이터분석과 솔루션개발을 담당하고 있는 김재영이라고 합니다. 빅데이터팀을 대표로 이렇게 만나게 되어서 정말 반갑습니다.

첫 글은 크롤링 대해서 소개해보려고 합니다. 크롤링 기술을 처음으로 소개드리는 이유는 우선 데이터를 수집하는 기술이 데이터 분석의 기초이자 가장 핵심적인 부분이기 때문입니다.

데이터 분석은 크게 수집, 전처리, 분석, 시각화 4가지로 나뉜다고 볼 수 있는데 이 과정에서 데이터 수집을 위한 방법중 하나로 crawling을 떠올릴 수 있습니다. 크롤링의 장점은 내부 데이터가 없는 개인이 쉽고 빠르게 데이터를 수집할 수 있다는 점입니다.

기업은 내부 데이터를 바탕으로 자신의 상품이나 서비스를 개선하고 분석하지만 개인이 그러한 데이터를 가지기엔 비용과 시간이 충분하지 않습니다. 이 문제에 크롤링은 시간과 비용을 절약해 준다는 점에서 데이터 수집 비용에 대한 좋은 해결책이 될 수 있습니다. 또한 어떠한 페이지든 상관없이 크롤링이 가능하다는 점에서 다양한 정보를 가져올 수 있습니다.

쉽게 예로들어 설명해보겠습니다. 저희 회사는 상품,서비스에 대한 유저 평가를 보기 위해 와디즈 홈페이지 크롤링을 실시하였습니다. 아래 그림은 필자가 하루 동안 크롤링을 통해 가져온 데이터를 바탕으로 시각화한 결과입니다.

‘와디즈’ 라는 크라우드 펀딩사이트를 이용했는데요, 크롤링을 통해 해당 게시물 3,000개 이상을 가져와 펀딩 성공 아이템에 대한 정보를 수집하였습니다. 코드 짜는데 2시간, 크롤링 1시간(총3시간 소요) 걸렸습니다. 3시간이면 나만의 데이터가 쌓이는 겁니다. 참쉽죠^^?

1. selenium(셀레니움) 이란?

지금부터 파이썬(python)을 활용하여 크롤링 하는 법을 공부하도록 하겠습니다. 우선 셀레니움에 대해서 공부하도록 할게요. 셀레니움은 웹 테스트 자동화 프레임워크로써, selenium webdriver를 이용하여 다양한 브라우저를 컨트롤 할 수 있습니다. 셀레니움은 구글크롬, 파이어폭스 등의 웹드라이버를 통해 작동해요.

BeautifulSoup 같은 다른 웹 수집기도 있지만 이러한 수집기들은 비동기적인 컨텐츠(뒤 늦게 불려오는 컨텐츠)들은 수집하기 매우 어려워요. 그래서 필자는 셀레니움을 활용하여 비동기 컨텐츠 수집을 시행하려고 해요!

그런데 셀레니움은 속도가 느리다는 점이 있어 실제 코드 구현 시 selenium 사용부분을 최소화 하는 것이 매우 중요해요!

2. selenium 설치

셀레니움은 pip를 이용하여 매우 쉽고 간단하게 설치할 수 있어요. 파이썬 터미널창을 켠뒤 아래에 나와있는 코드를 실행시켜 주세요. 페이지 url을 request를 통해 가져온 뒤 html 본문 내용을 가져오기 위해 Beautifulsoup4를 사용하기 때문에 설치되지 않으신 분은 아래와 같이 설치해주세요.

pip install selenium

pip install bs4

3. 크롬 브라우저 설치 및 크롬 웹드라이버 다운로드

우선 셀레니움은 webdriver를 이용하여 작동하는데 기본적으로 많이 사용하는 크롬 웹드라이버를 사용하여 작동할 예정이에요.

운영체제 환경마다 세팅하는 방법이 조금씩 다르기 때문에 각각의 운영체제에 대하여 커스터마이징 해야 할 필요가 있어요. 하지만 크롬 웹드라이버를 이용하므로 반드시 크롬 브라우저는 설치되어 있어야 해요! *윈도우, 맥(GUI 가능), Ubuntu, CentOS (GUI 불가능)

앞으로 크롬 웹드라이버를 이용하기 때문에 아래 링크에 들어가서 꼭 크롬 브라우저를 설치해 주세요. 크롬 드라이버 다운로드 링크를 적어두는 센스 !+_+! (GUI 환경)

크롬 드라이버 다운로드

위의 홈페이지 url로 접속해보면 크롬 웹 드라이버를 받을 수 있는 화면이 나와요. Latest Release의 크롬 드라이버링크를 클릭하여 설치해 주세요.

4. selenium 코드 사용해보기

Ubuntu, CentOs 서버 환경에서는 GUI를 지원하지 않기 때문에 모두 headless 으로 셀레니움 코드를 실행할 필요가 있어요. 셀레니움을 통한 코드 실습 방법은 아래를 참고해 주세요.

from selenium import webdriver

options = webdriver.ChromeOptions()

# headless 옵션 설정

options.add_argument(‘headless’)

options.add_argument(“no-sandbox”)

# 브라우저 윈도우 사이즈

options.add_argument(‘window-size=1920×1080’)

# 사람처럼 보이게 하는 옵션들

options.add_argument(“disable-gpu”) # 가속 사용 x

options.add_argument(“lang=ko_KR”) # 가짜 플러그인 탑재

options.add_argument(‘user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36’) # user-agent 이름 설정

# 드라이버 위치 경로 입력

driver = webdriver.Chrome(‘./chromedriver.exe’, chrome_options=options)

driver.get(‘https://naver.com’)

driver.implicitly_wait(3)

driver.get_screenshot_as_file(‘capture_naver.png’) # 화면캡처

driver.quit() # driver 종료

지금까지 우리는 셀레니움을 통한 동적 자료를 가져오기 위한 설치 및 환경 테스트를 시행하였어요. 설치 및 환경 테스트여서 큰 어려움을 없었을 거라 봐요. 혹시 어려운점이 있거나 에러가 발생했다면 댓글로 언제든지 물어봐 주세요!

다음 시간에는 셀레니움을 통해 동적인 URL 정보를 긁어오고 bs4(BeutifulSoup4)를 사용하여 해당 페이지 정보를 가져오는 방법에 대해 배워보도록 하겠습니다.

[웹 크롤링 – Python] Selenium 사용법 – 안녕 – 티스토리

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’) element.send_keys(“안녕”) element.send_keys(Keys.ENTER)

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’).send_keys(“안녕”, Keys.ENTER)

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’) element.send_keys(“안녕”)

2 thg 2, 2022 — 1. find를 이용해 element 찾기(find_element), click(), get_attribute() from selenium import webdriver url = “http://naver.com” browser …

  • Source: hi-guten-tag.tistory.com
  • Views: 53771
  • Publish date: 4 hours ago
  • Downloads: 17425
  • Likes: 8750
  • Dislikes: 8
  • Title Website: [웹 크롤링 – Python] Selenium 사용법 – 안녕 – 티스토리
  • Description Website: 2 thg 2, 2022 — 1. find를 이용해 element 찾기(find_element), click(), get_attribute() from selenium import webdriver url = “http://naver.com” browser …

세부 정보를 보려면 여기를 클릭하십시오.

파이썬 코딩 무료 강의 (활용편3) – 웹 크롤링? 웹 스크래핑! 제가 가진 모든 비법을 알려드리겠습니다. [나도코딩]

  • Source: Youtube
  • Views: 26356
  • Date: 6 hours ago
  • Download: 85194
  • Likes: 9638
  • Dislikes: 7

Python] Selenium 사용법

앞의 글을 읽으시면 이해에 도움이 됩니다.

2022.02.01 – [Python Library/웹 크롤링] – [웹 크롤링 – Python] Selenium 프레임워크 및 웹 드라이버

1. find를 이용해 element 찾기(find_element), click(), get_attribute()

from selenium import webdriver url = “http://naver.com” browser = webdriver.Chrome() browser.get(url)

우선 위 코드를 돌려서 네이버 홈페이지를 열여보자.

여기서 우리가 로그인 버튼을 클릭해보자

로그인 버튼의 HTML은 다음과 같다.

이때, 프로그램으로 로그인 버튼을 찾고, 그 버튼을 누르는 코드를 작성해야한다.

로그인 버튼을 찾는 방법은 여러가지가 있겠지만, Class명을 이용하는 방법이 있다.

from selenium.webdriver.common.by import By element = browser.find_element(By.CLASS_NAME, ‘link_login’)

참고로 frome selenium.webdriver.common.by import By를 통해서 By 모듈을 사용해야한다.

사실 저렇게 사용 안 해도

elem = browser.find_element_by_class_name(‘link_login’)

이렇게 찾을 수 있는데, 이렇게 쓰면

DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

라는 오류가 떠서, 위에처럼 By.’element_name’ 을 이용해 find를 쓰는게 좋다.

이렇게 하면 로그인 버튼에 해당하는 요소를 element변수에 저장할 수 있다.

이를 통해 우리는 로그인 버튼을 클릭할 수 있게 된 것이다.

로그인 버튼을 클릭하기 위해서는 click()이라는 함수를 쓰면 된다!

from selenium import webdriver from selenium.webdriver.common.by import By url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.CLASS_NAME, ‘link_login’) element.click()

이렇게 하면 로그인 버튼을 클릭한다..!

코드를 실행하니 자동으로 로그인 버튼을 클릭하는 모습이다.

만약에 element가 하나가 아니라 여러개라면 find_elements를 이용하면 된다

elements = browser.find_elements(By.TAG_NAME, ‘a’) for element in elements: print(element.get_attribute(‘href’))

추가적으로 get_attribute라는 함수도 있는데, HTML의 속성 값을 얻기 위해 사용된다.

get_attribute(‘element_name’)을 이용하면 엘리먼트 이름에 해당하는 속성의 값을 얻을 수 있다.

2. send_key, Keys_ENTER, clear()

우리가 네이버에 무언가를 검색할 때는 검색창에 무언가를 입력한다.

이때 무언가를 입력하기 위한 함수가 바로 send_key이다. 우선 send_key를 사용하기 위해서는 검색창에 해당하는 element를 우선적으로 가져와야한다.

또한, Keys를 import해줘야하는데 Keys는 By와 마찬가지로 selenium.webdriver.common.keys 아래에 있다.

from selenium.webdriver.common.keys import Keys

네이버 페이지의 검색창에 해당하는 HTML 이다.

ID를 이용해 검색창을 찾으면 된다.

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’) element.send_keys(“안녕”)

이렇게 되면 검색창에 ‘안녕’이 들어가있을 것이다.

움짤로 증명하고 싶지만, 움짤을 캡쳐하는 법을 몰라서 이렇게 스크린샷으로 올리는 점 양해 부탁 바랍니다..

하여튼 이렇게 안녕을 입력하고 나서 검색을 하기 위해서는 어떻게 해야하는가??

두 가지 방법이 있다. 하나는 그냥 엔터를 입력하는 것이고, 다른 하나는 옆의 돋보기 표시를 클릭하는 것이다.

돋보기 표시를 클릭하는 것은 앞의 1번 click()을 통해 할 수 있으니 패스하고, 엔터를 입력하는 방법을 이용해보자.

엔터를 입력하는 방법은 Keys.ENTER을 이용하면 된다. 매우 간단하다.

element.send_keys(Keys.ENTER)

이렇게 하면 자동으로 안녕을 입력하고, 엔터까지 친 모습을 확인할 수 있다!!!

그러면 지금까지의 코드를 한 번 전체적으로 작성해보겠다.

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’) element.send_keys(“안녕”) element.send_keys(Keys.ENTER)

좀 더 간략하게 쓰자면,

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys url = “http://naver.com” browser = webdriver.Chrome() browser.get(url) element = browser.find_element(By.ID, ‘query’).send_keys(“안녕”, Keys.ENTER)

이런식으로 축약해서 쓸 수도 있다!!

그리고 검색창에서 내용을 지우고 싶다면

element = browser.find_element(By.ID, ‘query’) element.clear()

를 이용해서 검색창을 지울 수 있다.

3. Selenium의 페이지와 관련된 함수 몇 가지

# 뒤로가기 browser.back() # 앞으로 가기 browser.forward() # 새로고침 browser.refresh() # 탭 닫기 browser.close() # 창 닫기 browser.quit() # 창 최대화 browser.maximize_window() # 창 최소화 browser.minimize_window() # 브라우저 HTML 정보 출력 print(browser.page_source)

끝!!!

참고 : 나도코딩

[Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합

https://m.bobaedream.co.kr/가 빠져있다… 그래서 보배드림 기본 사이트 url을 앞에 붙여주어야 내가 접속할 수 있는 완전한 url이 된다.

[Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합. 고뭉나무 2021. 5. 22. 12:42. 지난 포스팅 Requests 와 BeautifulSoup의 조합에 이어.

  • Source: rubber-tree.tistory.com
  • Views: 52376
  • Publish date: 23 minute ago
  • Downloads: 42664
  • Likes: 2893
  • Dislikes: 4
  • Title Website: [Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합
  • Description Website: [Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합. 고뭉나무 2021. 5. 22. 12:42. 지난 포스팅 Requests 와 BeautifulSoup의 조합에 이어.

세부 정보를 보려면 여기를 클릭하십시오.

초보자도 할 수 있는 요소(태그) 선택하기 | 파이썬 매크로, 크롤링

  • Source: Youtube
  • Views: 97113
  • Date: 16 hours ago
  • Download: 33691
  • Likes: 6172
  • Dislikes: 8

[Python 웹 크롤링] Selenium 과 BeautifulSoup의 조합

지난 포스팅 Requests 와 BeautifulSoup의 조합에 이어

2021.05.21 – [SW programming/Python] – [Python 웹 크롤링] Requests 와 BeautifulSoup 의 조합

이번 포스팅에서는 Selenium 과 BeautifulSoup의 조합에 대해 다뤄보도록 하겠습니다.

Selenium 와 BeautifulSoup 의 조합

(부제. 자동으로 클릭 접속하여 html 정보 추출)

그렇다. Selenium은 웹 브라우저를 자동으로 제어할 수 있게 해주는 패키지 이다. 아주 아~주 유용하게 사용되는 아이다 🙂

제어하고자 하는 웹 브라우저의 Driver를 설치해야 하며, 보통은 ‘ Chrome ‘을 사용한다. (Chrome driver 설치법은 따로 검색해주세요.)

그럼 먼저 오늘 할 실습을 보겠습니다.

한마디로, 아래와 같은 기능을 한다고 보면 됩니다.

특정 웹 브라우저를 통해 원하는 웹사이트 내에서 자유롭게 이동하며 원하는 정보를 불러온다.

Selenium 와 BeautifulSoup 의 기능

Selenium: 웹 브라우저를 이용하여 웹 사이트에서 자동적으로 제어할 수 있게 함.

BeautifulSoup: html과 xml 문서를 parsing하기 위한 패키지로 html에서 데이터를 추출하는 데 유용한 구문 분석 트리를 생성함.

각 모듈에서 자주 사용되는 함수

#Selenium 용 from selenium import webdriver import time #BeautifulSoup 용 from bs4 import BeautifulSoup #——————————Selenium을 이용한 제어 ——————————# #Selenium_webdriver 위치 지정 driver = webdriver.Chrome(‘/Users/mac/Downloads/chromedriver’) #Selenium_driver로 url 접속 url = “https://m.bobaedream.co.kr” driver.get(url) #Selenium_접속하는 데 시간이 걸릴 수 있으므로 1초 기다림 time.sleep(1) #Selenium_검색 돋보기 버튼을 클릭하기 위해 활용하는 x_path x_path = ‘//*[@id=”bobaeHead”]/div[1]/div/div[2]/div[2]/form/div[2]/button/span’ searchbox = driver.find_element_by_xpath(x_path) #Selenium_버튼 클릭 searchbox.click() #Selenium_검색창에 커서 얹음 element = driver.find_element_by_name(“keyword”) #Selenium_키워드 입력 element.send_keys(“쏘렌토”) #Selenium_버튼 클릭 element.submit() #Selenium_위의 작업이 수행된 후 해당 접속 사이트 url 정보 가져옴(html) #지난 포스팅에서 사용했던 Requests의 text 함수와 유사한 가능을 함. html = driver.page_source #—————————BeautifulSoup으로 html 정보 분석————————# #BeautifulSoup_html을 Parsing 함 soup = BeautifulSoup(html, ‘html.parser’) #BeautifulSoup_html 정보 분석 #BeautifulSoup_select_one() 함수 search_result = soup.select_one(‘ul.imgList01’) #BeautifulSoup_select() 함수 commu_list = search_result.select(‘li > a’)

그러면 예시를 통해 원하는 웹 크롤링을 수행해보자

예시. 보배드림 사이트에서 쏘렌토 중고 매물 글을 불러오기

아래 방식대로 수행할 예정이다.

1) 보배드림 메인 사이트를 접속한다.

2) ‘검색 돋보기’ 아이콘을 클릭한다.

3) 검색창에 ‘쏘렌토’를 타이핑하고 검색 버튼을 누른다.

4) 중고차 내역을 더 보기 위해 ‘더보기’ 버튼을 클릭한다.

5) 나열된 중고차 리스트의 ‘사이트 주소’를 읽어온다.

‘검색 돋보기’ 아이콘

XPath 추출

위에 파란색으로 물결 친 라인을 우클릭 한 후, Copy – Copy XPath를 클릭하면 XPath 주소가 복사된다.

이것이 ‘검색 돋보기’ 아이콘을 클릭하기 위해 필요한 XPath 이다.

검색창에 ‘쏘렌토’를 타이핑

돋보기 버튼을 누르면 아래처럼 검색창이 생기고 여기에 접근하기 위해서는 ‘name=keyword’에 주목해야 한다.

driver.find_element_by_name()함수를 이용하여 접근할 예정이다.

이후에 더보기 버튼도 위에 진행한 검색 돋보기 버튼과 같이 XPath를 복사하여 수행하면 된다.

중고차 리스트의 ‘사이트 주소’

지난 포스팅에서 단계별로 했던 url 찾기도 이제는 수월하게 할 수 있다. (이번 포스팅이 처음이라면 아래 참조)

2021.05.21 – [SW programming/Python] – [Python 웹 크롤링] Requests 와 BeautifulSoup 의 조합

아래와 같이 진행하면 된다.

soup.select_one(‘ul.imgList01’)

search_result.select(‘li > a’)

그리고 보너스.

보배드림 사이트 글 url의 a href를 보면 온전한 웹 주소의 형태가 아니다.

https://m.bobaedream.co.kr/가 빠져있다… 그래서 보배드림 기본 사이트 url을 앞에 붙여주어야 내가 접속할 수 있는 완전한 url이 된다.

이는 비교적 쉽다. #url 합치기

아래처럼 ‘+’ 연산자를 이용하면 된다.

url = “https://m.bobaedream.co.kr”

link = commu[‘href’]

link = url + link

#Selenium 용 from selenium import webdriver import time #BeautifulSoup 용 from bs4 import BeautifulSoup #Selenium_webdriver 위치 지정 driver = webdriver.Chrome(‘/Users/mac/Downloads/chromedriver’) #Selenium_driver로 url 접속 url = “https://m.bobaedream.co.kr” driver.get(url) #Selenium_접속하는 데 시간이 걸릴 수 있으므로 1초 기다림 time.sleep(1) #Selenium_검색 돋보기 버튼을 클릭하기 위해 활용하는 x_path x_path = ‘//*[@id=”bobaeHead”]/div[1]/div/div[2]/div[2]/form/div[2]/button/span’ searchbox = driver.find_element_by_xpath(x_path) #버튼 클릭 searchbox.click() #검색창에 커서 얹음 element = driver.find_element_by_name(“keyword”) #키워드 입력 element.send_keys(“쏘렌토”) #버튼 클릭 element.submit() #Selenium_’더보기’ 버튼을 클릭하기 위해 활용하는 x_path m_morebox = driver.find_element_by_xpath(‘//*[@id=”contents”]/div[6]/a’) #버튼 클릭 m_morebox.click() #Selenium_1초 기다림 time.sleep(1) #Selenium_위의 작업이 수행된 후 해당 접속 사이트 url 정보 가져옴(html) #지난 포스팅에서 사용했던 Requests의 text 함수와 유사한 가능을 함. html = driver.page_source #BeautifulSoup_html을 Parsing 함 soup = BeautifulSoup(html, ‘html.parser’) #BeautifulSoup_html 정보 분석 #BeautifulSoup_select_one() 함수 search_result = soup.select_one(‘ul.imgList01’) #BeautifulSoup_select() 함수 commu_list = search_result.select(‘li > a’) #중고 매물 사이트 5개 추출 links = [] for commu in commu_list[:5]: link = commu[‘href’] link = url + link #href 형태가 보배드림 기본 url이 빠져있어 url 합침 links.append(link) print(links)

예시를 통해 Selenium과 BeautifulSoup 함수들을 알아 보았습니다.

이제 아이디어만 있으면 어디서든 사랑 받는 자동화 웹 크롤링을 만들 수 있을 것 입니다 🙂

위 글이 도움이 되셨나면, 아래 하트를 눌러주세요↓

감사합니다 \( ˆoˆ )/​

주제에 대한 관련 정보 파이썬 크롤링 selenium

Bing에서 파이썬 크롤링 selenium 주제에 대한 최신 정보를 볼 수 있습니다.


주제에 대한 기사 보기를 마쳤습니다 파이썬 크롤링 selenium. 이 기사가 유용했다면 공유하십시오. 매우 감사합니다. 사람들이 이 주제와 관련하여 자주 검색하는 키워드: 파이썬 크롤링 selenium Selenium 크롤링 예제, Selenium Python, 파이썬 셀레니움 텍스트 추출, Python Selenium 동적 크롤링, Selenium 사용법, Selenium find_element, Selenium execute_script, Python selenium 예제

See also  베스트 1785 토브 구문 정독 업데이트 39 분 전

Leave a Comment