세조목

TIL(Today I Learned) 96일차(24.03.21)(크롤링-selenium, PCA) 본문

데이터 분석 공부/TIL(Today I Learned)

TIL(Today I Learned) 96일차(24.03.21)(크롤링-selenium, PCA)

세조목 2024. 3. 21. 21:11

크롤링

최종 프로젝트에서 비정형 데이터 분석을 하기위해 크롤링 학습을 진행하고있습니다.

금일은 selenium이라는 라이브러리를 학습했는데

beautifulsoup와 selenium의 차이점은 selenium은 동적 데이터 수집이 가능하다는 점입니다.

예를 들어 스크롤을 내리면 내용이 추가되는 페이지가 있다고했을때

beautifulsoup는 현재 출력되고있는 페이지 內 데이터만을 수집할 수 있지만

selenium은 스크롤을 자동으로 내리면서 새롭게 추가되는 데이터들도 수집할 수 있습니다.

 

from selenium import webdriver
from bs4 import BeautifulSoup
import time

url = ""

driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)

for i in range(5):
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # document.body.scrollHeight 부분에 숫자를 넣어주면서 어디까지 스크롤 할 지 정해줄 수 있음
    time.sleep(2)

html = driver.page_source
soup = BeautifulSoup(html, "html.parser")

items = soup.select(".view_wrap")

rank = 1
for item in items:
    writer = item.select_one(".name").text
    title = item.select_one(".title_link").text
    rank += 1

    print(f"<<<{rank}>>>")
    print(f"작성자 : {writer}")
    print(title)
    print()

 

위 코드는 '달서구 맛집'이라는 키워드로 검색했을때의 블로그탭에 나와있는 데이터들을 크롤링하는 코드입니다.

그러면 위와 같이 데이터를 수집할 수 있습니다.

 

코드 자체는 굉장히 간단했습니다.

필요한 라이브러리를 불러오고(ex. from selenium import webdriver),

script를 긁어오겠다는 코드를 적어주고(driver.execute_script("window.scrollTo...),

그렇게 수집한 html에서 원하는 정보만을 선택해내면 됩니다(item.select_one(".name").text).

 

내일은 강의를 한 번 더 듣고 복습하는 시간을 가지려고합니다.

 

클러스터링

금주 월요일부터 수요일까지 내일배움캠프 클러스터링 수업을 수강했는데,

어제의 수업 내용인 PCA(주성분 분석)가 잘 이해되지 않아

별도로 PCA관련 공부를 진행했습니다.

 

차원(변수)가 너무 많으면 효율적인 분석이 어렵기 때문에

일반적으로 차원을 축소시키는데 이 때 사용되는 것이 PCA입니다.

PCA는 n개 이상의 차원을 주성분으로 바꿔서 차원을 조금씩 줄여나가는 분석 방법입니다.

이 때 중요한건 n개 변수의 분산의 정보를 최대한 해치지 않아야 한다는 점입니다.

아직 PCA 학습이 진행중이어서 내일 중으로 정리가 마무리되면 별도의 포스팅으로 정리할 예정입니다.