출처 : https://www.youtube.com/watch?v=HJcrD7Ukli4&t=33s
목차
- 준비 사항
- HTML 코드 작성
- Python 코드 작성
- CSS Selector 사용법
- Python으로 긁어온 데이터 엑셀에 저장
1. 준비 사항
모듈 설치
BeautifulSoup과 엑셀 저장을 위해 아래 두 가지 모듈을 설치해야 합니다.
pip install beautifulsoup4 openpyxl
2. HTML 코드 작성
BeautifulSoup을 활용해 데이터를 추출할 HTML 파일을 작성합니다. 이 예제에서는 CSS Selector를 설명하기 위한 간단한 페이지를 만듭니다.
HTML 파일 (index.html)
<!DOCTYPE html>
<html lang="ko">
<head>
<style>
body {background-color: black;}
h1 {color: white;}
ul {list-style: none;}
.apple {color: pink;}
.grape {color: purple;}
.mango {color: yellow;}
.banana {font-size: 30px;}
.greenapple {color: green;}
</style>
</head>
<body>
<h1>CSS Selector</h1>
<div id="site">
<ul>
<li><a class="apple" href="https://naver.com">네이버</a></li>
<li><a class="grape" href="https://google.com">구글</a></li>
<li><a class="mango" href="https://youtube.com">유튜브</a></li>
<li><a class="greenapple" href="https://openai.com">OpenAI</a></li>
<li><a class="greenapple" href="https://python.org">Python</a></li>
</ul>
<p class="apple">css selector를 설명하기 위한 페이지</p>
<p class="apple banana">여기에는 두개의 클래스가 사용</p>
</div>
</body>
</html>
이 HTML 코드는 CSS 스타일을 적용한 다양한 요소와 클래스를 포함하고 있어, 추후 BeautifulSoup을 사용해 CSS Selector로 데이터를 추출할 수 있습니다.
3. Python 코드 작성
BeautifulSoup을 활용한 CSS Selector 연습
이제 Python을 통해 HTML 파일을 읽어 들여, CSS Selector로 원하는 데이터를 추출하는 코드를 작성해 보겠습니다.
from bs4 import BeautifulSoup
# HTML 파일 경로 설정
url = r'D:/myStudy/beautifulsoupProject/index.html'
# HTML 파일 열기
html = open(url, encoding='utf-8')
# BeautifulSoup 객체 생성
soup = BeautifulSoup(html, 'html.parser')
#====[ select_one : 첫 번째 요소 선택 ]====
# h1 태그 선택
print(soup.select_one("h1"))
# ul 태그 선택
print(soup.select_one("ul"))
# id를 통해 선택 (#site)
print(soup.select_one("#site"))
# class를 통해 선택 (.apple)
print(soup.select_one(".apple"))
#====[ select : 여러 요소를 리스트로 반환 ]====
# class로 선택된 모든 요소 가져오기
print(soup.select(".apple"))
# html 태그 + class로 접근 (a.apple)
print(soup.select("a.apple"))
# p 태그 내 apple 클래스를 가진 요소
print(soup.select("p.apple"))
# 자손 접근: 띄어쓰기로 자손 선택 (#site 내의 li 요소)
print(soup.select("#site li"))
# 자식 접근: 바로 아래 자식 요소만 선택 (#site > li)
print(soup.select("#site > li"))
# 자손 접근 + class (자손 중 apple class)
print(soup.select("#site .apple"))
# a 태그의 apple class 만 찾기
print(soup.select("a[class=apple]"))
# a 태그면서 class가 'app'로 시작하는 요소 찾기
print(soup.select("a[class^=app]"))
# a 태그면서 class에 'app'이 포함된 요소 찾기
print(soup.select("a[class*=app]"))
# 클래스가 apple로 정확히 일치하는 요소 찾기
print(soup.select("[class=apple]"))
# href 속성이 .org로 끝나는 링크 찾기
print(soup.select("a[href$='.org']"))
# 두 개의 클래스를 가진 요소 찾기 (띄어쓰기 주의)
print(soup.select(".apple.banana"))
이 코드는 BeautifulSoup의 다양한 CSS Selector를 활용하여 HTML 요소를 선택하는 방법을 보여줍니다. 각 코드 블록을 실행하면서 출력 결과를 확인해 보세요.
4. CSS Selector 사용법 (보강된 내용)
CSS Selector 종류와 설명
태그로 선택:
soup.select_one("h1")
- HTML에서 특정 태그를 선택합니다. 위 코드에서는 첫 번째
h1
태그를 선택해 출력합니다.
- HTML에서 특정 태그를 선택합니다. 위 코드에서는 첫 번째
id로 선택:
soup.select_one("#site")
- id 값이
site
인 요소를 선택합니다. id 선택자는#
을 사용하여 특정 id를 가진 요소를 찾아냅니다.
- id 값이
class로 선택:
soup.select_one(".apple")
- class 값이
apple
인 요소 중 첫 번째 요소를 선택합니다. class 선택자는.
을 사용합니다.
- class 값이
태그와 클래스 조합으로 선택:
soup.select("a.apple")
a
태그 중에서 class가apple
인 요소만 선택합니다.
자손 접근:
soup.select("#site li")
- id가
site
인 요소 내에 있는 모든li
자손 요소를 선택합니다. 자손 선택은 부모와 자손 요소 사이에 띄어쓰기로 나타냅니다.
- id가
자식 접근:
soup.select("#site > li")
- id가
site
인 요소 바로 아래 자식에 해당하는li
태그들만 선택합니다. 자식 선택은>
을 사용해 표시합니다.
- id가
속성 선택:
soup.select("[class=apple]")
- class 속성이 정확하게
apple
로 설정된 모든 요소를 선택합니다. 속성 선택자는 대괄호[ ]
를 사용해 속성과 값을 지정합니다.
- class 속성이 정확하게
속성 값으로 선택 (특정 문자열로 시작하는 속성):
soup.select("a[class^=app]")
class
속성이app
으로 시작하는 모든a
태그를 선택합니다. 이때^=
는 "시작하는 값"을 의미합니다.
속성 값으로 선택 (특정 문자열을 포함하는 속성):
soup.select("a[class*=app]")
class
속성에app
이 포함된 모든a
태그를 선택합니다.*=
는 "포함하는 값"을 의미합니다.
속성 값으로 선택 (특정 문자열로 끝나는 속성):
soup.select("a[href$='.org']")
href
속성이.org
로 끝나는 모든a
태그를 선택합니다.$=
는 "끝나는 값"을 의미합니다.
여러 클래스 선택:
soup.select(".apple.banana")
apple
과banana
라는 두 개의 클래스를 동시에 가진 요소를 선택합니다. 클래스 사이에는 띄어쓰기가 아닌.
으로 연결합니다.
단어로 일치하는 속성 선택:
soup.select("[class~=apple]")
class
속성 내에 정확히apple
이라는 단어가 포함된 요소를 선택합니다. 공백으로 구분된 여러 class 값 중에서apple
이 정확히 포함된 경우를 찾습니다.
자손 접근 + 클래스 선택:
soup.select("#site .apple")
- id가
site
인 요소 내에서 class가apple
인 자손 요소를 모두 선택합니다.
- id가
자식 접근 + 클래스 선택:
soup.select("#site > .apple")
- id가
site
인 요소 바로 아래에 위치한 자식 중에서 class가apple
인 요소를 선택합니다.
- id가
이로써 다양한 CSS Selector 사용법을 통해 HTML 요소를 세밀하게 선택할 수 있는 방법을 배웠습니다.
5. Python으로 긁어온 데이터 엑셀에 저장
BeautifulSoup으로 추출한 데이터를 엑셀 파일로 저장하는 방법을 소개합니다.
Python 코드 (엑셀에 데이터 저장)
import openpyxl
# 샘플 리스트 데이터
data = [
["이름", "나이", "직업"],
["홍길동", 30, "개발자"],
["김철수", 25, "디자이너"],
["이영희", 35, "매니저"]
]
# 새 워크북 생성
wb = openpyxl.Workbook()
# 활성화된 시트 선택
ws = wb.active
# 데이터를 시트에 입력
for row in data:
ws.append(row)
# 엑셀 파일 저장
wb.save("sample_data.xlsx")
print("엑셀 파일이 생성되었습니다.")
위 코드는 샘플 데이터를 엑셀 파일로 저장하는 예제입니다. 이 코드를 실행하면 sample_data.xlsx
파일이 생성됩니다.
결론
이 강의를 통해 BeautifulSoup과 CSS Selector를 사용하여 HTML 파일에서 데이터를 추출하는 방법과, 추출한 데이터를 엑셀 파일로 저장하는 과정을 배웠습니다. 각 코드를 따라하며 결과를 확인해 보세요!
'스터디내용' 카테고리의 다른 글
BeautifulSoup vs Selenium: 비교와 선택 기준 & 크롤링 팁 (0) | 2024.10.08 |
---|---|
Selenium과 CSS Selector 기초 강의 자료 (0) | 2024.10.08 |
한줄 한줄 코딩법 (0) | 2024.08.28 |
인공지능 챗봇 CLI 기반 프로그램(feat: gemini) (0) | 2024.07.31 |
__name__ 힘드셨죠? 제가 좋아하는 김플 선생님은 이렇게 설명하시네요. (0) | 2024.07.30 |