본문 바로가기

프로그래밍(2024) 2학년 상암고

[파이썬 응용 1 탄] 파이썬 웹크롤링 기초 이론과 실습 (feat. 주가 정보 확인 파이썬 프로그램)

👉 수업 시작 전 사전과제 

1. 구글 코랩 사용법을 알고 있어야 합니다. 

2. 파이썬 기초 문법 확인 (반복문, 제어문 등)

 

미니 오리엔테이션

 

Enter the Code to Join & Vote on a Presentation - Mentimeter

Enter the code from the Mentimeter presentation to join in and start voting. Make your voice heard!

www.menti.com

 

자료 공유방

https://docs.google.com/spreadsheets/d/1h1QHrDAYY06fstamPpFKjEaIVkI-WPbS-SWo1gE6qHI/edit?usp=sharing 

 

2023년 지식샘터 파이썬 프로젝트 1기 공유시트

시트1 구분,이름,소속,실습 포트폴리오 링크 (ex_노션),코랩 실습 링크,기타 사항 1,김광배 2,고준태 3,이은지 4,장윤정 5,김한길 6,강지혜 7,신규하 8,최은서 9,이상훈 10,박누리 11,박혜윤 12,지정학 13,

docs.google.com

 

채팅방

https://open.kakao.com/o/g8JImNpf

 

즐거운 파이썬 실전 프로젝트 교학공

 

open.kakao.com


👋오늘 파이썬 웹크롤링 실습 진행 방향

 [이론] 파이썬 웹크롤링의 기초 이해

 [실습 1] Replit에서 나만의 웹페이지 만들어보기(웹 구축 맛보기 버전)

 

 [실습 2]  내가 만든 사이트에서 다시 웹크롤링 해오기

 

 [실습 3] 관심있는 기업 주가 정보를 실시간 감시하는 파이썬 프로그램


[이론] 파이썬 웹크롤링의 기초 이해

 

웹 크롤링(Web Crawling)

은 웹 페이지의 HTML 내용을 긁어오는 과정을 말합니다. 이는 사람이 직접 웹페이지를 보며 내용을 수집하는 것이 아닌, 스크립트나 프로그램을 통해 자동화된 방법으로 정보를 수집하는 방법입니다.

웹 크롤링은 검색엔진, 데이터 분석, 데이터 마이닝 등 다양한 용도로 사용됩니다.

파이썬은 이러한 웹 크롤링을 수행하기 위한 강력한 도구로 널리 사용되고 있습니다. 특히 Requests, Beautiful Soup, Scrapy, Selenium, 등의 라이브러리를 사용하면 효과적으로 웹 크롤링을 할 수 있습니다.

 

 

웹크롤링 관련 파이썬 라이브러리들

 

Requests: Requests는 HTTP 요청을 보내는 데 사용되는 라이브러리입니다. 웹사이트의 HTML 데이터를 가져오는 데 사용됩니다. 

Beautiful Soup: Beautiful Soup는 HTML과 XML 문서를 파싱하기 위한 파이썬 라이브러리입니다. 웹페이지의 구조를 분석하여 원하는 데이터를 쉽게 추출할 수 있게 해줍니다. 태그 이름, 속성 등을 이용해서 특정 태그에 접근하거나, 태그 사이의 텍스트 데이터를 추출하는 것이 가능합니다.

Scrapy: Scrapy는 크롤링과 스크래핑을 위한 오픈 소스 프레임워크입니다. Beautiful Soup처럼 HTML에서 데이터를 추출하는 기능 뿐만 아니라, 웹사이트를 자동으로 돌아다니면서 (즉, 크롤링하면서) 데이터를 추출하는 등의 고급 기능을 제공합니다. 대량의 데이터를 효율적이고 빠르게 수집해야 하는 상황에서 유용하게 사용될 수 있습니다.

Selenium: Selenium은 웹 애플리케이션 테스팅을 위한 프레임워크입니다. 하지만 자바스크립트로 만들어진 동적인 웹페이지에서 데이터를 크롤링하는 데도 사용됩니다. Selenium은 브라우저를 자동화하여, 사용자와 같이 클릭하거나 스크롤하거나 키보드 입력을 하는 등의 동작을 자동화할 수 있습니다.

참고) Scrapy는 대규모의 정적 웹사이트에서 구조화된 데이터를 효율적으로 수집하는 데 적합하고, Selenium은 동적인 웹사이트에서 데이터를 수집하거나 웹사이트와의 복잡한 상호작용이 필요할 때 유용합니다.

단, 이번 웹크롤링 기초편에서는 Requests, Beautiful Soup 두 가지의 라이브러리를 사용해서 웹크롤링 실습을 할 것입니다. 나머지 라이브러리는 심화편에서 다룰 예정입니다.

 

샘플 코드

import requests
from bs4 import BeautifulSoup

# 웹페이지 요청
response = requests.get('https://www.example.com')

# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, 'html.parser')

# 웹페이지에서 <h1> 태그들을 모두 찾음
h1_tags = soup.find_all('h1')

for tag in h1_tags:
    print(tag.text)  # <h1> 태그의 텍스트 내용 출력

 

 

웹 페이지를 이루는 3가지 컴퓨터 언어(프론트 엔드)

 

HTML

HTML(HyperText Markup Language)은 웹 페이지를 만들기 위해 사용되는 표준 마크업 언어입니다. 웹 페이지의 구조와 콘텐츠를 정의하는 데 사용되며, 웹 브라우저는 HTML 문서를 렌더링하여 사용자에게 보여줍니다.

HTML 문서는 여러 개의 HTML 요소(element)로 이루어져 있습니다. 각 요소는 태그(tag)를 사용하여 표시됩니다. 예를 들어, <p>는 단락을 나타내며, <h1>은 가장 큰 제목을 나타냅니다. <a>는 링크를 나타내며, <img>는 이미지를 나타냅니다.

HTML 요소는 속성(attribute)을 가질 수 있습니다. 속성은 태그 내에 추가 정보를 제공합니다. 예를 들어, <a> 태그의 href 속성은 링크의 목적지를 나타냅니다. <img> 태그의 src 속성은 이미지의 소스 URL을 나타냅니다.

HTML 예시

<!DOCTYPE html>
<html>
    <head>
        <title>페이지 타이틀</title>
    </head>
    <body>
        <h1>제목</h1>
        <p>단락</p>
        <a href="https://www.example.com">링크</a>
    </body>
</html>

 

태그 <tag>

‘tag’는 왼쪽 그림과 같이 시작과 끝이 있
으며, 그 사이에 태그에 관한 콘텐츠 내
용을 담는다. ‘tag’의 종류에 따라 콘텐츠
형태가 정해진다. 이렇게 ‘tag’를 포함한
콘텐츠는 웹 페이지 요소(element)에 해
당하며, 결국 웹 페이지는 ‘tag’로 이루어
진 요소의 집합체라 할 수 있다.

 

가장 많이 사용되는 태그 확인

 

HTML Study | Advanced Web Ranking

This study looks at 11 mm index pages gathered from Top 20 Google results to uncover how people write HTML markup as new web tech emerge.

www.advancedwebranking.com

 

 

CSS 

CSS(Cascading Style Sheets)는 HTML 문서의 스타일을 지정하는 언어입니다. 색상, 레이아웃, 글꼴 등 웹 페이지의 디자인 요소를 제어하며, 웹 페이지의 외관과 표현을 HTML의 구조와 내용부터 분리시키는 데 중요한 역할을 합니다.

CSS 예시

body {
    background-color: lightblue;
}

h1 {
    color: white;
    text-align: center;
}

 

 

JavaScript

JavaScript는 웹 페이지에 동적인 기능을 추가하는 데 사용되는 스크립팅 언어입니다. HTML이 웹 페이지의 구조를 정의하고, CSS가 디자인을 담당하는 반면, JavaScript는 웹 페이지에 인터랙티브한 기능을 추가하는 역할을 합니다.

JS 예시

document.getElementById("myButton").onclick = function() {
    alert("버튼이 클릭되었습니다!");
}

 

[실습 1] Replit에서 나만의 웹페이지 만들기(웹 구축 맛 보기 버전)

 

1단계. replit에 접속 후(구글 로그인) html, css. js 개발환경에 접속합니다.

레플릿 접속 링크 : https://replit.com/

 

Replit: the collaborative browser based IDE

Run code live in your browser. Write and run code in 50+ languages online with Replit, a powerful IDE, compiler, & interpreter.

replit.com

 

구글 로그인 한뒤 html, css, js 템플릿으로 프로젝트를 생성합니다. Title은 최대한 간결하게 작성해 줍니다. 왜냐하면 title은 추후 사이트의 url로 연결되기 때문입니다. url은 심플고 짧으면 짧을수록 접근성이 좋습니다. 

 

2단계. <body> 태그 안에 웹사이트의 제목을 넣어봅니다. 제목 내용은 자유롭게 넣습니다. 

 

3단계. <img> 태그 안에 원한는 이미지의 주소를 넣습니다. 

이미지 찾기 : 이미지는 저작권을 침해하지 않도록 무료 사이트에서 가져 온다

저작권 무료이미지 사이트 예시: https://unsplash.com/

 

 

4단계. 작성한 나의 웹페이지의 url을 스마트폰에서 입력하여, 스마트폰에서도 웹페이지에 잘 접속되는지 확인합니다. 

 


 [실습 2]  내가 만든 사이트에서 다시 웹크롤링 해오기 

 

실습 안내

실습사이트 예시 : 여러분들은 본인 사이트 사용하시면 됩니다.

  • 경기기계공업고등학교 컴퓨터전자과 졸업생 김*은 학생 홈페이지

https://kimten0226.github.io/kimten_0226/2.html

 

종이의집

2.예고편/시놉시스 스페인에서 강도 행각을 벌이다 파트너 겸 연인이었던 공범자를 잃은 올리베이라. 어떻게 돈은 건졌지만 전국에 자신의 얼굴이 공개되어 현상수배까지 걸린 그녀는 어머니한

kimten0226.github.io

 

웹 크롤링 과정 확인하기

 

1단계. 구글 코랩에 접속하여 파이썬 웹크롤링에 필요한 패키지를 가져옵니다.

import requests
import bs4

 

2단계. 자신의 웹사이트 주소를 넣고 html 코드를 잘 가져왔는지 확인합니다.

# request.get 함수를 통해 URL에서 제공되는 소스코드를 변수 HTML_code 에 담는다.
## 구조 : request.get(URL)
URL = "웹크롤링 원하는 사이트 주소 넣어주세요"
HTML_code = requests.get(URL)

 

 

3단계. 내가 타겟한 정보가 어떤 태그 안에 들어 있는지 확인한다.

 

4단계. 내가 타겟한 정보를 가져오고, 불필요한 형태를 제거하는 데이터 클리닝 실시한다.

 

타겟팅한 데이터가 파이썬 변수에 잘 담겼는지 확인한다.

 


 [실습 3] 관심있는 기업 주가 정보를 실시간 감시하는 파이썬 프로그램

네이버 금융 주가 확인 페이지 : 삼성전자(005930) 

https://finance.naver.com/item/main.naver?code=005930 

 

삼성전자 - 네이버 증권 : 네이버 증권

관심종목의 실시간 주가를 가장 빠르게 확인하는 곳

finance.naver.com

 

필요한 라이브러리를 불러오고, 네이버 금융페이지 URL을 넣어 HTML 코드를 불러온다.

그중에서 시가 정보가 어떤 태그에 위치한지 확인한다.

<dl class = "blind"> 는 <dl>이란 태그에 "blind"란 클래스 선택자로 구분되어 있는 태그 이다. 

 

 

bs4 라이브러리로 html 코드를 parser 구조로 변경한다.

find 함수로 blind 클래스 선택자로 구별된 <dl>태그 내용물을 찾는다.

find_all 함수로 <dl class="blind"> 태그를 가져 온 뒤 <dd>태그 내용물을 싹다 가져온다.

 

 

 

 

ddData에서 필요한 데이터를 순차적으로 가져온다.

각각의 데이터를 str 데이터로 형변환 한다.

 

 

가져온 데이터를 replace 함수를 사용해서 필요없는 부분을 '' 공백으로 바꾼다.

정규식 re를 사용해서 0-9까지 숫자를 제외한([^0-9])를 공백으로 바꾼다.

 

위와 같이 목표치와 시가를 비교하여 사용자에게 알림을 줄 수 있는 코드를 작성한다. 코드 내용은 사용자 마다 자유롭게 바꾸는 것을 권장한다. 

 

[직접 문제 해결 해보기 1] 주가추적 함수 생성 및 활용

 

주가 추적 함수를 생성하고 아래와 같이 관심 기업 종목코드를 입력하여 현재 시가 기준 목표가와의 차액을 구하는 코드를 완성하시오.

 

[ 직접 문제 해결 해보기 2 ] 1분마다 관심종목 시가 정보를 제공하는 프로그램 작성

 

 

[ 심화문제 해결 ]

관심 종목의 시가가 변동(상승 혹은 하락) 했을 경우만 알려주는 프로그램을 작성해 보시오.

 

 

전체 코드 공개(과제를 수행하고 확인 하시오 !)

 

 

@ Wonking Python Class 2023