일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 유닉스
- 인프라
- 파이썬
- oracle
- 역학
- 자바
- NIO
- 리눅스
- write by chatGPT
- 데이터베이스
- flet
- GPT-4's answer
- android
- 시스템
- 자바암호
- 코틀린
- Database
- spring integration
- jpa
- write by GPT-4
- kotlin
- 자바네트워크
- 고전역학
- 소프트웨어공학
- Java
- spring data jpa
- python
- JVM
- chatGPT's answer
- 웹 크롤링
- Today
- Total
Akashic Records
8.1 웹 스크래핑 본문
웹 스크래핑에 대해 좀 더 상세하게 설명하겠습니다. 웹 스크래핑의 주요 단계는 다음과 같습니다.
웹 페이지 요청: requests 라이브러리를 사용하여 웹 페이지의 내용을 가져옵니다.
HTML 파싱: BeautifulSoup 라이브러리를 사용하여 웹 페이지의 HTML을 파싱하고, 필요한 데이터를 추출합니다.
데이터 처리 및 저장: 추출한 데이터를 처리하고 원하는 형식으로 저장합니다.
여기서는 웹 페이지에서 제품 이름과 가격 정보를 추출하는 예제를 살펴보겠습니다.
먼저 필요한 라이브러리를 설치합니다.
pip install requests beautifulsoup4
예제: 가상의 온라인 쇼핑몰에서 제품 이름과 가격 정보 가져오기
import requests
from bs4 import BeautifulSoup
url = "https://example.com/products" # 가상의 온라인 쇼핑몰 URL
response = requests.get(url)
if response.status_code == 200:
html_content = response.text
soup = BeautifulSoup(html_content, 'html.parser')
products = soup.select('.product')
for product in products:
product_name = product.select_one('.product-name').get_text(strip=True)
product_price = product.select_one('.product-price').get_text(strip=True)
print(f"제품 이름: {product_name}, 가격: {product_price}")
else:
print(f"웹 페이지를 가져오는 데 실패했습니다. 상태 코드: {response.status_code}")
이 예제에서는 웹 페이지의 제품 이름과 가격 정보를 추출합니다. soup.select() 메서드를 사용하여 제품에 해당하는 HTML 요소를 선택하고, for 루프를 사용하여 각 제품의 이름과 가격 정보를 가져옵니다. .select_one() 메서드를 사용하여 이름과 가격에 해당하는 요소를 선택한 후, .get_text() 메서드를 사용하여 해당 요소의 텍스트를 가져옵니다. strip=True 옵션은 텍스트 앞뒤의 공백을 제거합니다.
추출한 데이터를 원하는 형식으로 저장하는 방법도 다양합니다. 예를 들어, CSV 파일로 저장할 수 있습니다.
import csv
# ... (웹 페이지 요청 및 HTML 파싱 코드)
with open('products.csv', 'w', newline='', encoding='utf-8') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(["제품 이름", "가격"]) # 헤더 작성
for product in products:
product_name = product.select_one('.product-name').get_text(strip=True)
product_price = product.select_one('.product-price').get_text(strip=True)
csv_writer.writerow([product_name, product_price]) # 제품 정보 작성
이 코드는 추출한 제품 이름과 가격 정보를 CSV 파일로 저장합니다. csv 모듈을 사용하여 CSV 파일을 열고, csv.writer 객체를 생성합니다. 헤더를 작성한 후, for 루프를 사용하여 각 제품의 이름과 가격 정보를 가져와 CSV 파일에 작성합니다.
웹 스크래핑을 수행할 때 주의해야 할 사항들은 다음과 같습니다.
- 웹사이트의 이용 약관 확인: 웹사이트의 이용 약관에 따라 웹 스크래핑이 금지되어 있을 수 있으므로, 이용 약관을 확인해야 합니다.
- robots.txt 파일 확인: 웹사이트의 robots.txt 파일에는 웹 크롤러 및 스크래퍼에 대한 규칙이 명시되어 있으므로, 이를 확인하고 준수해야 합니다.
- 요청 간격 조절: 웹사이트에 과도한 요청을 보내지 않도록 요청 간격을 적절하게 조절해야 합니다. time.sleep() 함수를 사용하여 요청 간격을 조절할 수 있습니다.
- 유지 보수: 웹사이트의 구조가 변경되면 스크립트가 작동하지 않을 수 있으므로, 정기적으로 스크립트를 확인하고 유지 보수가 필요할 수 있습니다.
웹 스크래핑은 웹 페이지의 정보를 자동으로 추출하는 데 유용한 기술입니다. 그러나 웹사이트의 이용 약관과 robots.txt 파일을 준수하고, 웹사이트의 부담을 최소화하는 방법으로 웹 스크래핑을 수행해야 합니다. 웹 스크래핑을 통해 얻은 데이터를 처리 및 저장하여 분석, 시각화, 머신 러닝 등 다양한 목적으로 활용할 수 있습니다.
'Python for Beginners' 카테고리의 다른 글
8.3 웹 프레임워크 (1) | 2023.03.24 |
---|---|
8.2 웹 개발 API 사용법 (0) | 2023.03.24 |
7.5 기타 유용한 라이브러리 (0) | 2023.03.23 |
7.4 로깅 (0) | 2023.03.23 |
7.3 정규 표현식 (0) | 2023.03.23 |