Python 웹 스크래핑 기초 01
Python 웹 스크래핑 기초 01입니다. requests, BeautifulSoup, 로컬 HTML 파싱, User-Agent, timeout, robots/약관과 요청 속도 기준을 정리했습니다.
Python 웹 스크래핑 기초 01
Web scraping은 웹 페이지에서 필요한 데이터를 자동으로 가져와 구조화하는 작업이다. 시작하기 전에 robots.txt, 이용약관, 요청 빈도, 개인정보 처리 기준을 확인해야 한다. 학습 단계에서는 허가된 테스트 페이지나 직접 만든 HTML 파일로 구조를 익히는 것이 안전하다.
패키지 설치
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install requests beautifulsoup4requests 기본
requests는 HTTP 요청을 보내고 응답을 받는 라이브러리다. timeout을 넣지 않으면 서버가 응답하지 않을 때 프로그램이 오래 멈출 수 있다.
import requests
url = "https://example.com/"
response = requests.get(
url,
timeout=10,
headers={"User-Agent": "devmes-study-bot/1.0"},
)
print(response.status_code)
print(response.text[:200])BeautifulSoup 기본
BeautifulSoup은 HTML에서 원하는 요소를 찾는 도구다. 외부 사이트 구조가 바뀌면 selector도 바뀔 수 있으므로, 먼저 작은 HTML로 연습한다.
from bs4 import BeautifulSoup
html = """
<html>
<body>
<h1>Devmes Blog</h1>
<article class="post">
<a href="/linux">Linux guide</a>
</article>
<article class="post">
<a href="/python">Python guide</a>
</article>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
print(soup.select_one("h1").get_text(strip=True))
for link in soup.select("article.post a"):
print(link.get_text(strip=True), link["href"])스크래핑 전 체크리스트
- 대상 사이트가 자동 수집을 허용하는지 확인한다.
- 로그인이 필요한 개인 데이터나 비공개 데이터는 수집하지 않는다.
- 요청 간 지연을 두고, 대량 요청을 피한다.
- 에러 코드와 네트워크 실패를 처리한다.
- HTML 구조가 바뀔 수 있으므로 selector를 테스트한다.
요청 속도 제한 예시
import time
import requests
urls = ["https://example.com/"]
for url in urls:
response = requests.get(url, timeout=10)
print(url, response.status_code)
time.sleep(1)