2024.12.20 - [개발관련] - 파이썬 강좌 9 - 객체지향
파이썬 강좌 9 - 객체지향
2024.12.20 - [개발관련] - 파이썬 강좌 8 - 모듈과 패키지 파이썬 강좌 8 - 모듈과 패키지2024.12.20 - [개발관련] - 파이썬 강좌 7 - 예외처리 파이썬 강좌 7 - 예외처리2024.12.20 - [개발관련] - 파이썬 강좌
woowonwoo.tistory.com
파이썬 웹 크롤링 강좌
웹 크롤링(Web Crawling)은 웹 페이지에서 데이터를 자동으로 추출하는 기술입니다.
이 강좌에서는 파이썬을 사용해 웹 크롤링의 기본적인 개념과 실습을 다룹니다.
1. 웹 크롤링에 필요한 라이브러리
웹 크롤링을 위해 주로 사용되는 파이썬 라이브러리는 다음과 같습니다.
라이브러리설명
requests | 웹 페이지의 HTML 소스를 가져오는 데 사용됩니다. |
BeautifulSoup | HTML, XML 데이터를 파싱하여 분석할 수 있습니다. |
lxml | 빠르고 효율적인 HTML/XML 파싱 라이브러리입니다. |
selenium | 동적 웹 페이지 크롤링에 사용됩니다. |
필수 라이브러리 설치
pip install requests beautifulsoup4 lxml selenium
2. 웹 크롤링 기본
2.1 HTTP 요청 보내기
requests 라이브러리를 사용해 웹 페이지 소스를 가져옵니다.
import requests
url = "https://example.com"
response = requests.get(url)
print(response.text) # HTML 소스 출력
2.2 HTML 파싱하기
BeautifulSoup을 사용해 HTML을 구조적으로 분석합니다.
from bs4 import BeautifulSoup
html = "<html><body><h1>Hello, World!</h1></body></html>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text) # 출력: Hello, World!
2.3 실습: 웹 페이지에서 제목 가져오기
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
title = soup.title.text
print(f"웹 페이지 제목: {title}")
3. HTML 구조 탐색
BeautifulSoup은 HTML 요소를 쉽게 탐색할 수 있는 다양한 메서드를 제공합니다.
메서드설명
find | 첫 번째로 매칭되는 요소를 반환합니다. |
find_all | 매칭되는 모든 요소를 리스트로 반환합니다. |
select | CSS 선택자로 요소를 찾습니다. |
select_one | CSS 선택자로 첫 번째 매칭 요소를 반환합니다. |
3.1 find와 find_all
html = """
<html>
<body>
<div class="item">Item 1</div>
<div class="item">Item 2</div>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
# 첫 번째 div 요소
print(soup.find("div").text) # 출력: Item 1
# 모든 div 요소
for div in soup.find_all("div"):
print(div.text)
3.2 select와 select_one
html = """
<html>
<body>
<div id="main">
<p class="text">Hello</p>
<p class="text">World</p>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
# CSS 선택자로 탐색
print(soup.select_one("#main .text").text) # 출력: Hello
print([p.text for p in soup.select(".text")]) # 출력: ['Hello', 'World']
4. 실습: 특정 데이터 크롤링
4.1 뉴스 제목 크롤링
아래는 뉴스 웹사이트에서 제목을 크롤링하는 예제입니다.
import requests
from bs4 import BeautifulSoup
url = "https://news.ycombinator.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 뉴스 제목 추출
titles = soup.select(".storylink")
for idx, title in enumerate(titles):
print(f"{idx + 1}. {title.text}")
5. 동적 웹 페이지 크롤링
동적 웹 페이지는 JavaScript를 통해 데이터를 로드합니다.
이 경우 selenium을 사용하여 데이터를 가져올 수 있습니다.
5.1 Selenium 설치 및 사용
- 웹 드라이버 다운로드 (예: ChromeDriver).
ChromeDriver 다운로드 링크 - selenium 설치:
pip install selenium
5.2 Selenium 기본 사용법
from selenium import webdriver
from selenium.webdriver.common.by import By
# ChromeDriver 경로 설정
driver = webdriver.Chrome(executable_path="chromedriver_path")
driver.get("https://example.com")
# 요소 찾기
title = driver.find_element(By.TAG_NAME, "h1").text
print(f"페이지 제목: {title}")
# 브라우저 닫기
driver.quit()
5.3 실습: Google 검색 자동화
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="chromedriver_path")
driver.get("https://www.google.com")
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("파이썬 웹 크롤링")
search_box.send_keys(Keys.RETURN)
# 검색 결과 출력
results = driver.find_elements(By.CSS_SELECTOR, ".tF2Cxc")
for result in results[:5]:
print(result.text)
driver.quit()
6. 크롤링 시 주의사항
- robots.txt 확인
크롤링 전에 웹 사이트의 robots.txt 파일을 확인하여 허용 여부를 확인하세요.
예: https://example.com/robots.txt - 지나친 요청 금지
웹 서버에 과도한 요청을 보내는 것은 금지됩니다. 적절한 딜레이를 추가하세요.
import time
time.sleep(1) # 1초 대기
3.법적 문제
크롤링한 데이터를 상업적으로 사용하려면 해당 웹사이트의 이용 약관을 확인하세요.
7. 연습 문제
- 영화 리뷰 크롤링
특정 영화 리뷰 사이트에서 리뷰 제목과 별점을 크롤링해보세요. - 동적 페이지 크롤링
Selenium을 사용해 특정 전자상거래 사이트에서 상품 이름과 가격을 크롤링하세요. - 크롤링한 데이터 저장
크롤링한 데이터를 CSV 파일로 저장해보세요.
import csv
with open("data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["제목", "URL"]) # 헤더 작성
writer.writerow(["예제 제목", "https://example.com"]) # 데이터 작성
8. 요약
- 기본 크롤링: requests와 BeautifulSoup으로 정적 웹 페이지 데이터 추출.
- 동적 크롤링: selenium을 사용하여 JavaScript 기반 데이터 추출.
- 데이터 저장 및 활용: 크롤링 데이터를 CSV, JSON 등 다양한 형식으로 저장.
- 주의사항: 크롤링 대상 웹사이트의 정책을 준수.
다음 단계로는 크롤링 데이터를 활용해 데이터 분석 또는 시각화를 진행해볼 수 있습니다. 😊
'개발관련' 카테고리의 다른 글
클라우드에서 빌드 실패할 때 (0) | 2025.01.03 |
---|---|
SwiftUI 에서 HTML Text 쓰는법 (0) | 2025.01.03 |
SwiftUI Environment 완전정복 (0) | 2024.12.31 |
자바스크립트로 웹 크롤링 하는 법 (0) | 2024.12.21 |
Firebase Cloud Functions에서 puppeteer 실행이 안될때 (0) | 2024.12.21 |
Firebase Cloud Functions Deploy 해도 반영 안될때 (0) | 2024.12.21 |
파이썬 강좌 9 - 객체지향 (1) | 2024.12.20 |
파이썬 강좌 8 - 모듈과 패키지 (1) | 2024.12.20 |