[데이터크롤링]웹 자동화

정제철·2023년 6월 23일
0

빅데이터

목록 보기
13/17
post-thumbnail

📢웹 자동화

웹 자동화란?

  • 사람이 일반적으로 웹 브라우저를 사용하여 수행하는 작업을 자동으로
    수행할 수 있도록 도와주는 기술
  • 웹 자동화를 통해 시간을 절약하고 반복적이고 지루한 작업을 자동화하
    여 생산성을 향상시킬 수 있다.
    ex) 웹 개발, 데이터 수집, 테스트 자동화

📌selenium

  • 웹 애플리케이션을 테스트하거나 자동화하기 위해 사용되는 오픈 소스
    프레임워크

  • 실제 사용자가 웹 브라우저를 조작하는 것과 유사한 방식으로 웹 페이
    지의 요소 클릭, 텍스트 입력, 페이지 간 이동을 수행하며, 결과를 확인
    할 수 있다.

  • 동적으로 HTML이 생성되는 경우에는 requests를 사용할 수 없다.

  • 스크롤 했을 때 데이터가 생성되는 경우

  • URL 주소는 동일한데 데이터가 변하는 경우

  • Anaconda prompt에서 selenium을 설치해준다.

pip install selenium

📍크롬 드라이버 실행

  • 크롬 드라이버를 실행하여 네이버에 접속해보자
import time

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)

driver.get("https://www.naver.com")

📍selenium 기본 메소드

  • 마우스 클릭 : click()
  • 키보드 입력 : send_keys(‘input’)
  • CSS 선택자 : find_element(s)(By.CSS_SELECTOR, ‘selector’)
  • 속성 가져오기 : get_attribute(‘attr’)
  • 자바스크립트 실행 : execute_script(‘code’)

📌네이버 쇼핑 상품 목록 가져오기

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import openpyxl

wb = openpyxl.Workbook()
ws = wb.create_sheet('posco')

ws['A1'] = '상품명'
ws['B1'] = '가격'
ws['C1'] = '링크'

# 검색어 입력
search = input("검색어를 입력하세요: ")

driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://shopping.naver.com/home")

search_input = driver.find_element(By.CSS_SELECTOR, '#__next > div > div.pcHeader_header__tXOY4 > div > div > div._gnb_header_area_150KE > div > div._gnbLogo_gnb_logo_3eIAf > div > div._gnbSearch_gnb_search_3O1L2 > form > div._gnbSearch_inner_2Zksb > div._searchInput_search_input_QXUFf > input')
search_input.click()
search_input.send_keys(search)

search_btn = driver.find_element(By.CSS_SELECTOR, '#__next > div > div.pcHeader_header__tXOY4 > div > div > div._gnb_header_area_150KE > div > div._gnbLogo_gnb_logo_3eIAf > div > div._gnbSearch_gnb_search_3O1L2 > form > div._gnbSearch_inner_2Zksb > div._searchInput_search_input_QXUFf > button._searchInput_button_search_1n1aw')
search_btn.click()

current_height = driver.execute_script("return window.scrollY")

while True:
    driver.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END)
    time.sleep(1)
    
    scrolled_height = driver.execute_script("return window.scrollY")
    
    if (current_height == scrolled_height):
        break
    
    current_height = scrolled_height

products = driver.find_elements(By.CSS_SELECTOR, '.product_item__MDtDF')
price = driver.find_elements(By.CSS_SELECTOR, '.product_price_area__eTg7I')

for product in products:
    title = product.find_element(By.CSS_SELECTOR, '.product_link__TrAac').get_attribute('title')
    price = product.find_element(By.CSS_SELECTOR, '.price_price__LEGN7').text
    url = product.find_element(By.CSS_SELECTOR, '.product_link__TrAac').get_attribute('href')
    print("제목:", title)
    print("가격:", price)
    print("URL:", url)
    ws.append([title,price,url])




wb.save(r'C:\Users\gram\anaconda3\Untitled Folder\selenium_crawlingtest.xlsx')

자동화 검색

결과 출력

엑셀에 저장

profile
성공의 반대는 실패가 아닌 도전하지 않는 것이다.

0개의 댓글