웹 스크래핑은 웹사이트에서 데이터를 추출하는 기술로, 다양한 데이터 분석 및 서비스 개발에 활용되고 있습니다. 이번 포스팅에서는 Python을 사용하여 간단한 웹 스크래핑 API를 만들어보겠습니다. Flask 웹 프레임워크와 BeautifulSoup 라이브러리를 활용하여, 특정 웹 페이지에서 데이터를 가져오는 API를 설계해보겠습니다.
개발 환경 구축
먼저, Flask와 BeautifulSoup을 설치해야 합니다. 아래의 명령어를 통해 필요한 라이브러리를 설치하세요.
pip install Flask beautifulsoup4 requests
Flask API 기본 설정
다음으로 Flask 애플리케이션을 설정합니다. 아래 코드를 app.py 파일에 작성해보세요.
from flask import Flask, jsonify, request
import requests
from bs4 import BeautifulSoup
app = Flask(__name__)
@app.route('/scrape', methods=['GET'])
def scrape():
url = request.args.get('url')
if not url:
return jsonify({'error': 'URL 파라미터가 필요합니다.'}), 400
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string if soup.title else '제목 없음'
return jsonify({
'url': url,
'title': title
})
except requests.exceptions.RequestException as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
이 코드는 GET 요청을 통해 전달받은 URL에서 제목(title) 정보를 추출하여 JSON 형식으로 반환하는 간단한 API를 만듭니다.
API 사용 방법
이제 Flask 서버를 실행해보겠습니다. 아래 명령어를 통해 서버를 실행하세요.
python app.py
서버가 실행되면, 웹 브라우저 또는 Postman과 같은 API 클라이언트를 사용하여 간단하게 테스트할 수 있습니다. 예를 들어, 아래와 같이 요청을 보내면 됩니다.
GET http://127.0.0.1:5000/scrape?url=https://www.example.com
응답으로는 해당 URL의 제목을 포함한 JSON 데이터가 반환됩니다.
{
"url": "https://www.example.com",
"title": "Example Domain"
}
에러 처리
위의 코드는 기본적인 웹 스크래핑 기능을 제공합니다. 하지만, 사용자 입력에 대한 검증과 에러 처리가 부족합니다. 다음과 같이 수정하여 보다 Robust한 API로 개선할 수 있습니다.
@app.route('/scrape', methods=['GET'])
def scrape():
url = request.args.get('url')
if not url:
return jsonify({'error': 'URL 파라미터가 필요합니다.'}), 400
if not url.startswith(('http://', 'https://')):
return jsonify({'error': '유효한 URL을 입력하세요.'}), 400
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string if soup.title else '제목 없음'
return jsonify({
'url': url,
'title': title
})
except requests.exceptions.RequestException as e:
return jsonify({'error': str(e)}), 500
위와 같이 URL의 유효성을 체크하여 적절한 에러 메시지를 반환하도록 개선했습니다.
마무리
이번 포스팅에서는 Flask와 BeautifulSoup을 사용하여 간단한 웹 스크래핑 API를 만드는 방법을 알아보았습니다. 이 API는 특정 URL의 제목 정보를 가져오는 기능을 제공하며, 기본적인 에러 처리도 추가하였습니다. 웹 스크래핑 기술은 데이터 수집에 매우 유용하므로, 이를 활용하여 다양한 프로젝트에 응용해보시기 바랍니다. 추가적인 기능으로는 데이터베이스에 저장하거나, 여러 데이터를 한 번에 가져오는 기능도 고려해볼 수 있습니다.