빅데이터 국비 교육
[아이티윌 빅데이터 52기] LAB 13 | 웹 페이지 데이터 수집하기
datahaseo
2025. 11. 7. 17:36
[아이티윌 빅데이터 52기] LAB 13 | 웹 페이지 데이터 수집하기
*모든 자료 저작권은 아이티윌 이광호 강사님
데이터 스크래핑과 데이터 크롤링의 개념 차이

HTML 의 이해

CSS 선택자 개요

<css selector 예제>
1. 라이브러리 참조하기
2. 웹 페이지의 모든 소스코드 가져오기
3. 수신 결과 확인
4. 응답 결과에 대한 Beautifulsoup 객체 생성
5. HTML 태그에 의한 추출
6. 클래스에 의한 추출
7. ID 에 의한 추출
8. 복합 선택자
9. 속성 선택자
1. 라이브러리 참조하기
import requests
from bs4 import BeautifulSoup
2. 웹 페이지의 모든 소스코드 가져오기
#웹에 데이터 요청하기
with requests.Session() as session:
#세션 객체에 웹 브라우저 정보 (UserAgent) 주입 (웹서버가 파이썬 프로그램을 정상적인 웹 브라우저로 여기도록)
session.headers.update({"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
})
url = "https://data.hossam.kr/py/sample.html"
r=session.get(url) #get 메서드로 접근하고, 파라미터 값 쿼리 스트링 형태로 전달
print(r.url)
if r.status_code !=200:
msg ="[%d Error] %s 에러가 발생함" % (r.status_code,r.reason)
raise Exception(msg)
print(r) # HTTP 통신 상태 확인
3. 수신 결과 확인
r.encoding ='utf-8'
print(type(r.text))
r.text

4. 응답 결과에 대한 Beautifulsoup 객체 생성
soup =BeautifulSoup(r.text)
print(type(soup))
soup

5. HTML 태그에 의한 추출
- select() 메서드의 리턴 타입은 항상 리스트 타입
- 따라서 리스트 원소에 접근하여 html 태그 객체를 추출해야한다
- 객체로부터 텍스트만 추출할 떄는 tag.text.strip()
myselect = soup.select("h1")
print(type(myselect))
myselect
===========
mytag=myselect[0]
print(type(mytag))
mytag
===========
mytext = mytag.text.strip()
mytext

6. 클래스에 의한 추출
- 클래스 속성은 여러 항목에 공통적으로 부여될 수 있어 복수로 존재하며, 추출된 결과는 반복문을 통해 처리가 필요하다
- select() 메서르도 추출한 요소의 하위 요소를 추가적으로 추출할 수 있다
myselect=soup.select(".myclass")
myselect
===================
for i,v in enumerate(myselect):
print("%d 번째 요소 : %s"%(i,v.text.strip()))
===================
myli = myselect[2].select("li")
myli
===================
for i in myli:
print(i.text.strip())

7. ID 에 의한 추출
- id 속성은 페이지에서 고유한 요소임을 의미한다
- 단 하나만 존재하기 때문에 반복문으로 탐색할 필요가 없다
myselect = soup.select("#myid")
myselect
====================
print(myselect[0].text.strip())
====================

8. 복합 선택자
- 자식 선택자가 바로 하위에 존재할때는 > 를 쓰고, 하위 중 어딘가에 존재할 때는 띄어쓰기로 값을 추출할 수 있다
soup.select(".syllabus > .myclass")
soup.select(".part1 .myclass")

9. 속성 선택자
- href 속성을 갖는 요소를 추출하는 방법
myselect = soup.select("a[href]")
myselect
====================
# 속성값은 각 태그요소의 attrs 프로퍼티로 접근 가능 --> dict 형태
for i, v in enumerate(myselect):
print("----[%d]----" % i)
print(v.attrs)
# 딕셔너리에 대한 in 연산자는 key의 존재 여부를 판별
if "href" in v.attrs:
print("%d번째의 href속성값 : %s" % (i, v.attrs["href"]))
