Web Crawling(웹 크롤링)_Selenium_인프런 강의목록 (python)

juyeon·2022년 8월 7일
0

크롤링

목록 보기
10/13

Selenium이란?

  • 회사에서 어떤 코드를 만들었다면, 이를 바로 서비스할 수 없음.
    QA 팀을 통해서 테스트가 통과되어야 실제 서비스 되도록 올라갈 수 있음.

  • 근데.. 매번 모든 기능을 일일히 사용하기에는 번거로움.
    그래서! QA팀이 이 기능을 사용하는 것을 자동화 시켜주는게 selenium.

  • 즉 테스트용

  • 다양한 언어를 지원: R, C, Java,...

  • 다양한 브라우저를 지원: 크롬, 사파리 등등

  • 브라우저를 파이썬 코드로 컨트롤 해서 브라우저에 있는 데이터를 수집

  • 이것을 크롤링 때도 사용할 수 있음!

작동 원리

: client가 인터넷을 통해 sever에 데이터를 요청하면, 받아온 데이터가 client의 브라우저 안에 존재하게 된다.
selenium을 이용하면 파이썬에서 직접 server에 데이터를 요청하는게 아니라, 브라우저를 컨트롤해서 데이터를 가져오게 된다.

Why selenium? (장점)

  • 크롤링 할때 user-agent등을 요구하는 경우가 있는데, 이것들을 다 입력해도 안되는 경우가 존재한다. 이렇게 차단 당한 경우는 브라우저가 아니라 파이썬을 사용해서 데이터를 가져왔기 때문이다.
  • 그렇다면, 브라우저가 직접 데이터를 가져오면 차단이 안된다!
  • 그래서 우리는 실제 브라우저를 컨트롤 해서 데이터를 가져올 것이다

단점

  • 직접 요청해서 가져오는 것보다 굉장히 속도가 느리다.

크롤링 할 때 좋은 순서

: 더 좋고, 효율적이고, 빠른건?

    1. API를 이용하여 application key를 받은 후, requests를 써서 JSON 형식의 데이터 수집
    1. 개발자 도구를 이용하여 웹 페이지의 API 트래픽을 분석해서 데이터 수집
    1. 개발자 도구를 이용하여 웹 페이지의 HTML 코드 받아서 데이터 수집
      : html 코드의 양이 json 코드의 양 보다 훠얼씬 많기 때문에
    1. selenium을 이용하여 파이썬으로 브라우저를 컨트롤하여 데이터 수집
      : 브라우저가 켜질때까지 시간 걸리고, 브라우저 안에서 파이썬으로 데이터 가져올 때도 시간이 걸림. 그래서 앞 3개가 안될 때 사용

절차

1. 설치

크롬 브라우저 드라이버 다운로드

: 크롬 브라우저와 같은 버전으로 다운

selenium 패키지 설치

  • option: 크롬 브라우저와 드라이버 파일을 환경변수로 등록하면 조금 십게 사용 가능
!pip install selenium

from selenium import webdriver
from selenium.webdriver.common.by import By

2. selenium으로 브라우저 컨트롤 연습해보기

  • 브라우저 띄우기
driver = webdriver.Chrome()
  • 페이지 이동
driver.get("https://www.naver.com/")
  • 브라우저 사이즈 조절
driver.set_window_size(200, 600)
  • 브라우저 스크롤 조절(자바스크립트 코드 실행)
driver.execute_script("window.scrollTo(300, 300);")
  • alert 다루기
    : alert 창이 중간에 뜨면 크롤링을 못하기 때문에, 이 창을 없애고 데이터를 수집해야함.
driver.execute_script("alert('hello naver!');")

alert = driver.switch_to.alert
alert.accept() # alert 창 닫기

driver.execute_script("window.scrollTo(0, 0);") # 다시 스크롤 이동
  • input 창에 자동으로 입력
driver.find_element(By.CSS_SELECTOR, "#query").send_keys("파리바게트")
  • 검색 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#sform > fieldset > #search_btn").click()
  • 브라우저 종료
driver.quit()

3. selenium으로 텍스트 데이터 수집

keyword = "데이터 분석"

driver = webdriver.Chrome()
driver.get("https://www.inflearn.com/")
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section.search > div > div > div > input").click()
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section.search > div > div > div > input").send_keys(keyword)
time.sleep(1)
driver.find_element(By.CSS_SELECTOR, "#pg___main > section:nth-child(2) button").click()
time.sleep(1)
elements = driver.find_elements(By.CSS_SELECTOR, "#courses_section div.courses_container > div > div")

data = []
for element in elements:
    data.append({
		"title" : element.find_element(By.CSS_SELECTOR, "div.course_title").text,
		"teacher" : element.find_element(By.CSS_SELECTOR, "div.card-content > div.instructor").text,
		"price" : element.find_element(By.CSS_SELECTOR, "div.card-content > div.price").text,
		"link" : element.find_element(By.CSS_SELECTOR, "a.course_card_front").get_attribute("href"),
	})
    
inflearn_data_analysis = pd.DataFrame(data)

driver.quit()
inflearn_data_analysis.head()

꿀팁

  • 환경변수 설정이 윈도우는 잘 안되는 경우가 있어서, 같은 디렉토리에 놓고 쓰는게 가장 안전한 방법
  • 브라우저는 파이썬 코드로만 컨트롤 하는게 에러를 줄일 수 있음. 직접 건들지는 말자
profile
내 인생의 주연

0개의 댓글