목차
- 웹 스크래핑이란?
- 웹 스크래핑을 위한 라이브러리 소개
requests
모듈BeautifulSoup
모듈
- 웹 스크래핑 기본 사용법
- 웹 페이지 요청 및 응답 처리
- HTML 파싱 및 데이터 추출
- 고급 웹 스크래핑 기법
- 다중 페이지 스크래핑
- 데이터 저장 및 분석
- 예시 코드
- 결론
- 관련 자료 및 추가 학습 자료
1. 웹 스크래핑이란?
웹 스크래핑은 웹 페이지에서 원하는 데이터를 자동으로 추출하는 기술입니다. 이를 통해 다양한 웹 사이트에서 정보를 수집하고 분석할 수 있습니다. Python에서는 requests
와 BeautifulSoup
모듈을 사용하여 웹 스크래핑을 쉽게 구현할 수 있습니다. requests
모듈은 HTTP 요청을 보내고 응답을 받는 데 사용되며, BeautifulSoup
은 HTML 문서를 파싱하고 원하는 데이터를 추출하는 데 사용됩니다.
2. 웹 스크래핑을 위한 라이브러리 소개
requests
모듈
requests
모듈은 간단하고 사용하기 쉬운 HTTP 라이브러리로, 웹 서버와 통신하기 위한 다양한 기능을 제공합니다. GET, POST 등 다양한 HTTP 요청을 보내고, 서버로부터 응답을 받을 수 있습니다.
- 설치 방법:
pip install requests
BeautifulSoup
모듈
BeautifulSoup
은 HTML 및 XML 문서를 파싱하고, 문서에서 데이터를 쉽게 추출할 수 있도록 도와주는 라이브러리입니다. lxml
이나 html.parser
와 같은 파서(parser)를 사용하여 HTML 구조를 탐색하고 원하는 데이터를 추출할 수 있습니다.
- 설치 방법:
pip install beautifulsoup4
3. 웹 스크래핑 기본 사용법
웹 페이지 요청 및 응답 처리
웹 스크래핑의 첫 번째 단계는 웹 페이지에 요청을 보내고, 응답을 받아오는 것입니다. requests
모듈을 사용하여 이 작업을 수행할 수 있습니다.
예시: 웹 페이지 요청:
import requests url = 'https://example.com' response = requests.get(url) if response.status_code == 200: print("요청 성공!") print(response.text) # 응답 내용 출력 else: print("요청 실패:", response.status_code)
requests.get()
을 사용하여 웹 페이지에 GET 요청을 보내고, 응답 객체를 반환받습니다.response.status_code
를 통해 요청의 성공 여부를 확인할 수 있습니다.
HTML 파싱 및 데이터 추출
웹 페이지의 HTML 문서에서 원하는 데이터를 추출하려면 BeautifulSoup
을 사용하여 문서를 파싱해야 합니다.
예시: HTML 파싱 및 데이터 추출:
from bs4 import BeautifulSoup html_doc = """ <html> <head><title>Example Page</title></head> <body> <h1>Hello, World!</h1> <p class="description">This is a simple web page.</p> <a href="https://example.com">Visit Example</a> </body> </html> """ soup = BeautifulSoup(html_doc, 'html.parser') # 제목 추출 title = soup.title.string print("Title:", title) # 첫 번째 <h1> 태그 추출 heading = soup.h1.string print("Heading:", heading) # 클래스가 'description'인 <p> 태그 추출 description = soup.find('p', class_='description').string print("Description:", description) # 모든 <a> 태그의 href 속성 추출 links = soup.find_all('a') for link in links: print("Link:", link.get('href'))
BeautifulSoup
객체를 생성하고,find()
나find_all()
메서드를 사용하여 원하는 태그와 속성을 찾습니다.string
속성을 사용하여 태그의 텍스트를 추출할 수 있습니다.
4. 고급 웹 스크래핑 기법
다중 페이지 스크래핑
일부 웹 사이트는 여러 페이지에 걸쳐 데이터를 제공하며, 이러한 경우 각 페이지를 순회하면서 데이터를 추출해야 합니다.
예시: 다중 페이지 스크래핑:
import requests from bs4 import BeautifulSoup base_url = 'https://example.com/page/' all_data = [] for page_num in range(1, 4): # 1페이지부터 3페이지까지 스크래핑 url = f"{base_url}{page_num}" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 각 페이지에서 데이터 추출 items = soup.find_all('div', class_='item') for item in items: title = item.find('h2').string all_data.append(title) print("Extracted Data:", all_data)
- 각 페이지의 URL을 구성하고 순회하면서 데이터를 추출합니다.
데이터 저장 및 분석
추출한 데이터를 CSV 파일이나 JSON 파일로 저장하여 나중에 분석하거나 사용할 수 있습니다.
예시: 데이터 저장 (CSV 파일):
import csv # 추출한 데이터 리스트 data = [ {"title": "Item 1", "price": "$10"}, {"title": "Item 2", "price": "$20"} ] with open('data.csv', 'w', newline='') as csvfile: fieldnames = ['title', 'price'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for item in data: writer.writerow(item)
csv.DictWriter
를 사용하여 데이터를 CSV 파일로 저장합니다.
5. 예시 코드
간단한 웹 스크래핑 예시
import requests
from bs4 import BeautifulSoup
url = 'https://news.ycombinator.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.find_all('a', class_='storylink')
for idx, title in enumerate(titles):
print(f"{idx + 1}: {title.string}")
- 이 코드는 Hacker News의 제목을 추출하여 출력합니다.
이미지 다운로드 예시
import requests
from bs4 import BeautifulSoup
import os
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 이미지 태그 찾기
images = soup.find_all('img')
# 이미지 다운로드 및 저장
for img in images:
img_url = img['src']
img_data = requests.get(img_url).content
img_name = os.path.basename(img_url)
with open(img_name, 'wb') as img_file:
img_file.write(img_data)
print(f"{img_name} 다운로드 완료")
- 이 코드는 웹 페이지에서 이미지 태그를 찾아 이미지를 다운로드합니다.
6. 결론
웹 스크래핑은 웹 페이지에서 데이터를 자동으로 추출하는 강력한 기술입니다. Python에서는 requests
모듈을 사용하여 웹 페이지에 요청을 보내고, BeautifulSoup
을 통해 HTML 문서를 파싱하여 원하는 데이터를 추출할 수 있습니다. 이러한 기술을 사용하면 다양한 웹 사이트에서 데이터를 수집하고 분석할 수 있으며, 이를 통해 정보 수집, 데이터 분석, 자동화 작업 등을 효율적으로 수행할 수 있습니다. 그러나 웹 스크래핑을 수행할 때는 대상 웹 사이트의 이용 약관을 준수하고, 과도한 요청을 피하여 서버에 부담을 주지 않도록 주의해야 합니다.
7. 관련 자료 및 추가 학습 자료
- 공식 홈페이지 및 문서
- BeautifulSoup 공식 문서: https://www.crummy.com/software/BeautifulSoup/bs4/doc/
- Requests 공식 문서: https://docs.python-requests.org/en/master/
- 국가기관 및 보고서
- NIST (국립 표준 기술 연구소) - 데이터 수집 및 분석 가이드: NIST Publications
- 추천 도서
- 블로그 및 기타 자료
- Real Python - Web Scraping with BeautifulSoup: https://realpython.com/beautiful-soup-web-scraper-python/
- geeksforgeeks - Python Web Scraping Tutorial: https://www.geeksforgeeks.org/python-web-scraping-tutorial/
이 글에서는 Python에서 requests
와 BeautifulSoup
를 사용하여 웹 스크래핑을 수행하는 방법을 살펴보았습니다. 웹 페이지에서 데이터를 추출하고 분석하는 데 이 기술을 활용하여 효율적인 데이터 수집 및 분석 작업을 수행해 보세요.
'Python' 카테고리의 다른 글
Python 테스트와 문서화 (2) | 2024.11.23 |
---|---|
Python 데이터베이스 연동 (3) | 2024.11.22 |
Python - 멀티스레딩과 병렬 처리 (3) | 2024.11.20 |
Python - 네트워킹 (2) | 2024.11.19 |
Python 고급 파일 처리 및 운영 체제 인터페이스 활용법 (3) | 2024.11.07 |