카테고리 없음

[패스트 캠퍼스_데이터 분석 부트캠프] 18기 4주차

sooooo-happyday 2025. 3. 23. 21:45

2025/3/17~2025/3/21

4주차 기록


[수강한 강의 내용]

- 데이터 분석을 위한 핵심 Tool Python

넘파이 부분은 복습해야겠다..

 

### 1단계, 필요한 라이브러리 설치

- selenium : 웹드라이버를 컨트롤하는 파이썬 라이브러리
- webdriver-manager : 웹 드라이버를 다운받아주는 파이썬 라이브러리

%pip install selenium webdriver-manager

 

### 2단계, 크롬 드라이버 다운로드

from webdriver_manager.chrome import ChromeDriverManager
ChromeDriverManager().install()

 

### 3단계, 브라우저 오픈
- 브라우저: 내가 마음대로 컨트롤 할 수 있는 브라우저

from selenium import webdriver
browser = webdriver.Chrome()

 

# 브라우저 이동
url = 'http://weather.naver.com'
browser.get(url)

 

 

#아래 첫째줄을 써야 엘레멘트(=요소)를 불러올 수 있다고 함. 대소문자 주의.

CLASS_NAME는 대문자로 작성해야함. 약속이라고 함.

from seleniu webdriver.common.by import By
browser.find_element(By.CLASS_NAME, 'current').text

 

찾고싶은 클래스 이름을 검사 메뉴를 통해 html 코드에서 찾고, 

browser.find_element(By.CLASS_NAME, '여기에 넣기').text <이거는 텍스트로 보여줘 라는 뜻.

 

 

가져온 데이터를 split('뭘기준으로 자를것이냐')

 

html에서 id는 중복 불가능.

class는 중복 가능.

그래서 id명을 가져오는게 좋을 수 있음.

 

# (3) 최근 실거래 정보 (nn억.. 좋겠다)

browser.find_element(By.CLASS_NAME, 'complex_price--trade').text.split('\n')[1] <몇번째꺼 가져올거냐. 0부터 시작함.

 

 

아 재밌다~

 

 

 

 

 

elements <- s 붙이면 리스트 list가 됨.

 

 

 

판다스 설치

%pip install pandas

 

이건 복습 겸

datas = ['요소1', '요소2', '요소3']

for i in datas:
    print(i)

----

 

 

import pandas as pd
df = pd.DataFrame(data_list)
df.to_csv('네이버부동산_하늘채내꺼_한글깨짐보완.csv', encoding='utf-8-sig')

📌 한 줄씩 쉽게 풀어보기

1️⃣ import pandas as pd

👉 Pandas(판다스) 라이브러리 불러오기

  • 데이터를 표처럼 다룰 수 있는 DataFrame을 사용할 수 있어요!

2️⃣ df = pd.DataFrame(data_list)

👉 리스트(data_list)를 표 형태로 변환 (엑셀처럼 다룰 수 있음!)

  • data_list가 딕셔너리 리스트라면 자동으로 열(Column)과 행(Row)으로 정리됨.

3️⃣ df.to_csv(파일명, encoding='utf-8-sig')

👉 CSV(엑셀에서 열 수 있는 파일)로 저장하기!

  • encoding='utf-8-sig' → 한글 깨짐 방지
    (엑셀에서 열 때 한글이 깨지는 문제 해결!)

 

 

 

 

# 첫 번째 뉴스의 링크 가져오기.
링크는 보통 - a 태그 안에 포함되어 있음.

browser.find_element(By.CLASS_NAME, 'WlydOe').get_attribute('href')

 

<a jsname="YKoRaf" class="WlydOehref="https://www.kisti.re.kr/promote/post/news/5277;jsessionid=d0XW5NCKAMz3xmu3Ta6ckmrj7sE8JCaQOS457qS4nKYOThWvvIarVuSdSikBWVGW.al211_servlet_engine23?cPage=3&t=1742083200071" data-ved="2ahUKEwiCi56t1JCMAxWRafUHHXzpEY4QxfQBKAB6BAgIEAE" ping="/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.kisti.re.kr/promote/post/news/5277%3Bjsessionid%3Dd0XW5NCKAMz3xmu3Ta6ckmrj7sE8JCaQOS457qS4nKYOThWvvIarVuSdSikBWVGW.al211_servlet_engine23%3FcPage%3D3%26t%3D1742083200071&ved=2ahUKEwiCi56t1JCMAxWRafUHHXzpEY4QxfQBKAB6BAgIEAE"><div class="lSfe4c r5bEn aI5QMe"><div class="gpjNTe"><div class="YEMaTe JFSfwc" style="background-color:#a09277;height:92px;width:92px"><div class="uhHOwf BYbUcd" style="height:92px;width:92px"><img alt="" id="dimg_IdjXZ8L2J5HT1e8P_NLH8Ag_9" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAFwAXAMBIgACEQEDEQH/xAAbAAACAgMBAAAAAAAAAAAAAAAFBgMEAAECB//EADwQAAIBAwIEAwYEAwYHAAAAAAECAwAEEQUhBhIxQRNRYRQiMnGRsUKBwdFDcqEVIzM1YsIkJURTgpOi/8QAGQEAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAJxEAAgIBAwIFBQAAAAAAAAAAAAECEQMEITESIhMUQVFhMjNxgZH/2gAMAwEAAhEDEQA/ADgSQ4EjKwyM4yv2NMFjrtvYR5ksbVMfiReU/md6X+et89ADVJxPNIMwpGoPQnJNUptavJes7D0Xb7UBMj9q4aSUdiflRYBV7t3OXdifU1C02e9CzLIT8D1sGTqVZfWpsC+0majJqBGkPwlSPOpBnuMVBJsms3rAM11y+o+tAHOTWb+VWI7SeT/Dhkf+VCanGk3xGRZz/wDrNSQARdxkZDbeeK2LyH/uJ8s0qXc8+gX93pcdnFPFZzvHE755inMSuT58pFT22uyyxcxtUjbyzmluVOiyTasZhdxnoT9DU8MgkcKfcBPxN0FKk+s3MUJl/uwozkYq7ouovqFus7PEsbfCem++c5+VSnasgcltLMKDJqUI/kR2/QV0E0pB71zcyH/REF+5NLlvdQTIsgm9xmI5uU7Y6529aIRNpbD/ADVG7nkjJx9SKtZBfmm0oIRHHdFuzNKo/wBtCmYd2b61dEenlOZZp5Ae4RQPuaqezlmwudzgbUASWt77K/OiRscY/vED/erZ4mu12SVY/REVfsKqjSbw/wACf80x+lRzaW8a80wwPVx+9TQWWH4ivH2a7mP/AJmozqUzbmVyf5qqiKCPB5lB9X/eqz6po0MskU13GsiHDDm6HAP61ZIixXfUZtW1C+1DU7aK0nuZFcxKdhhFXvv+EVuBI3L+HgqD2qxc6eDIuFODDE22/WNT2+eazT7UQNIvm2a58pJzbNiTWNIkjsEu45IpMhehx60T0qxg0izWG3aUKCcEtv8AXaubNMM/5UY0+1e8k8KJQzYJwTTo/TSES5BXJH7KqEZAkc7jI3C/tUdvZxENlRuMfCP2q2z/APLb5rW4hLW7SB3V+dYnC783L0x61rhovc6TbTtOLmR48u6jbPcbeXTeinVkWjUllbvaKrAZVMdBt19KGzachtkZJpI2iAHuuRtzHy+dHJ/BjjtC5wLkSlGQAg8gye/lQ22a11PTUuYuYpJzAeIApBViOmT5UrK5RjY3FUpUTR6X/wALKSzEhGO5PXFJ9hBcPdyRzcwUd8mvSoeQxMrfiGDSkUim1K+it1aJbabwyzPzc3u58tq2YPkz5H7B7Q9NibTkblBPMwyRk9atvpkJPvQxk+q1vRbmG14dlu3cGOLncknHTeqWj8U2F1DMNQube2nilKFXYJzDAIIBOfxY+YNMa7hSbItB0aXVdG0q7jdVWSxt13TJysSqT/8ANS6xo/8AYqePPKHjKuzcqEYCgZ279a880C9udS5Ldri4it4DzPLFKUC523xgdaYJ7iz0G9u7V9QuZ0uYIZImkcyhW5m5h3xtj+lLehvG8yfqO8w+pY2U9JkudIaa916+eO2uHYWwlyfE782Oq7Y2x3pjudag0jwZpTJhj/DUnbFL2qcR2lxpt1pc4keKeJgh5MhW3CsMnbcZoVxHqY1S0SO1DoEwQ7Ag57jarrC+pNJtENqqJ21iSx03X4XsbgwapLI0U52C8y43/pVXRb7VOHbaGV4xClyxki8Zc+KgAzgZBA6b0Au2vY29mnvJZQTjkE7Ov7UUFhJLEq3d5NIyjC5k5gnoM9qu4qTqKFrZbjBaPrD8P2txpEEDWulrOZJGOT7+ebIyMYVsf19KH8OcT+xW5srx40t1V2jdVZjzs2cHHbc/SuS0MNglpBPcImBzRk7epGPPbOfKmfhnhCz1OMGV5Bzf6a0eSjnx3xXIp6ny7t/oGw8YTNZPN7XbtMhA8FLZgcEHfJIHapBxOqNNjR4Ue5Ad3VyGfK7E7eRoZxDZWGiarLpbTcvJeRs8zRsW8IA5xgHuR67Ub13iXhmaeC70k8s8be+gidBID5kr1GNt/OqqMPFUJ7L4GW3jco7gO5udWux7AntEFlNlfATJEnfpjckgUPj0G7vlE2TJsFyzjOw9adb/AI7068tbGGNPBeG5SVpAR0Gdtt/KptO4z4aigb2q0iMzuWc+ZPemN6fHOpptC4eLOF8MT+H0jjtJbNpPCiuEZZJVOWH5HFHdO4X0O6jkSSe7d44+c3BkC5I6juD29aQxPCfgnlQ9i0WPsxonp2rxw27QT3ashyVGH6kY8qwOLeydGpS90d3qQRXsccLM8WCEMuxxzHGRXoPDGl6fcW6+Lbx5I3w2QfrXn0VtZ3cLsNU0+J48lFmmZeceQPL1+eKuWDXdm8Isr61cv/iGK5RvD/U/SunpdXHHDol/TDqtPLIu10WtW0HTJNf1C2Ms1qLaQeCY0EgYZPbIPl0NQalbCxjV1mWaCQe5Kg5ckdQQdwfSii8L398ZLuW+tQW6vNPu3rgA/wBcUPubV4rW8sbho5CgEqPGeZeYdcZx+EmseTNF5X0mrHB9CUuRZ8e4ku8xI8qkfCFLfbtTxpeha8llZXunXTQxzqTIskZBg3wOp3z17UrKkNteBZryPxeYDwreRww9C6jC9fM01aDIjXN1aMt8JI0VsT3hmQjOMrv60rJqcuG3BkrFCe0hY4xsZ7G/h9rvkvZ5kLvIudjnGDQEGnDjmwuZri2lggdoo4m53Ue6u/c0q+yThebkyPMEGqRyvIuqXJZwUXSIs1make1uIzh4ZFPkVNcGKUdY3+lWAq5rM71oVlVA6rYFcV2KAGTgJV/t74RvA46eq0c1ORLjUbmzfxF5zyZjXmZiQNgPXOKB8B/5+nrG/wBq3xbezLxDcxxEQm2KukkXuvllXJJHyA+VJX3n+Bl1FF6PSUvpkVIFimR8SS3Mvhqp+XU/kP2r0LhnhTS7K4a6vNaguZJIwhijkCr1B6nc9OwFeaTIqCIKAPcB6eeTUbO6/C7L8jimyTkqsE8fLQz8RzQW3EXEC28nII15YBDfPG6HwUIIUEAjJJ+Y8s0uR6vqK/8AW3LZH8R+ffGx97PTarOnTzjR78+MxVpHUowBByiAnJGc42zmqAjHKCc109NiUoK0Y8k+50cW9xJbzGVEti5znntoznPXtVxdbu48hLewUE5IFooqqYlIJ32raDatK00H6C/EZ//Z" data-csiid="IdjXZ8L2J5HT1e8P_NLH8Ag_11" data-atf="1"></div></div></div><div class="SoAPf"><div class="MgUUmf NUnG9d"><g-img class="QyR1Ze ZGomKf" style="margin-right:8px"><img id="dimg_IdjXZ8L2J5HT1e8P_NLH8Ag_31" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABvklEQVQ4jc2SP2hTURTGv3PufX+SNmrFxipCYycpWK3GRUREpG4qNFR0cHJwKMVRhLbEwW7SRVHEQRBBh+DgHMSgiNSlBhF8REkcokTbhrzw3rvv3etoh4BIBv3Gw/l+wzk/MsYQ+gj3U/4/ALLX8N6rL5x1AniBlMdn5w6h0bjElrNwpLnS2rxX8taYdi6Wn6QElxIDbofJxX3Z9KNqs3Nz/4CZXb59rWCCaCLemnl8/sLi0Q5baQDI2Fz1lR5PSW5JX+kpJvI2gmTGkfyxHUa1lCU605XSGRME5+wD4wcb+WPr62RNREqfEkwdV2PVsbgrmDoMA0SJKUSxzo1ud29EhrphYtLhlqG6VnE6ePfe2/Pg/mr5+dJdbeBlHPHiW/HEdUEkfRVrBgGOJA8E/PRVLoxh+yoZezg59SZ19vRud29uBireAW3szYfvKj3SVRhhAEg03rpSrGwE8VVBv70azU+2gWTQ2jV8eWn6yuueb7SYPkgyzeEB61agzOCQSzkpuHo4bLlfy5WTMpt9mf9UefqsWNCOQM0WVAcAS1DNFqhTL5U/F+9sM2s/7LHl+e9/8qAn4G/y71XuG/ALLFa1G5jgkW8AAAAASUVORK5CYII=" style="border-radius:2px 2px 2px 2px" class="YQ4gaf zr758c" height="16" width="16" alt="" data-csiid="IdjXZ8L2J5HT1e8P_NLH8Ag_12" data-atf="1"></g-img><span>한국과학기술정보연구원</span></div><div class="n0jPhd ynAwRc MBeuO nDgy9d" aria-level="3" role="heading" style="-webkit-line-clamp:3">KISTI, 소방 맞춤형 빅데이터 분석 교육과정 추진 | KISTI 소식 | KISTI 홍보</div><div class="GI74Re nDgy9d" style="margin-top:8px;-webkit-line-clamp:3">한국과학기술정보연구원(원장 김재수, 이하 KISTI)과 소방청(청장 신열우)은 오는 7월 5일부터 9일까지 소방 빅데이터 분석 기본교육을 진행한다.</div><span class="wXEDqf" tabindex="-1">.</span><div class="OSrXXb rbYSKb LfVVr" style="bottom:0px"><span>8시간 전</span></div></div></div></a>

 

 

 

 

 

 

import pandas as pd
pd.DataFrame(data_list)

 

 

 

Headless 모드

from selenium import webdriver

options = webdriver.ChromeOptions()  # 옵션 생성
options.add_argument("headless")     # Headless 모드 설정

# Headless 브라우저 실행
browser = webdriver.Chrome(options=options)
browser.get("https://www.naver.com")

 

 

browser.title

열린 브라우저의 제목 보여주는 코드

 

**암묵적 대기 (Implicit Wait):**
    - 모든 요소를 찾기 전 최대 대기 시간을 지정.

browser.implicitly_wait(5)  # 최대 5초 대기

 

**강제 대기 (Time Sleep):**
    - 정해진 시간 동안 무조건 대기.

import time
time.sleep(5)  # 5초 대기

 

import random
time.sleep(random.randint(5,30))

 

## 정리
- **`By`로 HTML 요소를 식별:** ID, 클래스명, 태그 이름, XPATH 등을 활용.
- **`Keys`로 키보드 동작 자동화:** 텍스트 입력, Enter, Tab 등.
- **단일 요소(`find_element`)와 다수 요소(`find_elements`)를 구분하여 사용.**
- 여러 요소를 다룰 때는 **리스트**를 반환받아 루프를 통해 처리.

 

개발자 도구에서 HTML 태그를 펼치거나 접는 단축키
엣지 브라우저에서 F12 또는 Ctrl + Shift + I 를 눌러 개발자 도구(DevTools)를 연 후, Elements(요소) 패널에서 아래 단축키를 사용할 수 있습니다.
기능
단축키
선택한 태그를 펼치기 (하위 요소 1단계만)
→ (오른쪽 방향키)
선택한 태그를 접기
← (왼쪽 방향키)
선택한 태그의 모든 하위 요소를 한 번에 펼치기
Alt + 클릭 (Windows) / Option + 클릭 (Mac)
선택한 태그의 모든 하위 요소를 한 번에 접기
Alt + 클릭 (Windows) / Option + 클릭 (Mac)
전체 HTML 태그를 한 번에 펼치기
Ctrl + Alt + →
전체 HTML 태그를 한 번에 접기
Ctrl + Alt + ←

 

 

개발자 도구에서 HTML 태그를 펼치거나 접는 단축키

엣지 브라우저에서 F12 또는 Ctrl + Shift + I 를 눌러 개발자 도구(DevTools)를 연 후, Elements(요소) 패널에서 아래 단축키를 사용할 수 있습니다.
기능
단축키
선택한 태그를 펼치기 (하위 요소 1단계만)
→ (오른쪽 방향키)
선택한 태그를 접기
← (왼쪽 방향키)
선택한 태그의 모든 하위 요소를 한 번에 펼치기
Alt + 클릭 (Windows) / Option + 클릭 (Mac)
선택한 태그의 모든 하위 요소를 한 번에 접기
Alt + 클릭 (Windows) / Option + 클릭 (Mac)
전체 HTML 태그를 한 번에 펼치기
Ctrl + Alt + →
전체 HTML 태그를 한 번에 접기
Ctrl + Alt + ←