웹 크롤링 및 데이터 처리 실습

웹 크롤링 기본 개념

웹 크롤링은 웹사이트에서 필요한 데이터를 추출하는 기술입니다. 이를 위해 requests 모듈을 사용하여 HTTP 요청을 보내고 HTML 문서를 가져올 수 있습니다.


import requests

url = 'http://www.redbull.com.cn/about/branch'
response = requests.get(url)

# 응답 객체 확인
print(response)  # <Response [200]>

# HTML 내용 출력
html_content = response.text
print(html_content)

HTML 문서는 웹 페이지의 구조와 내용을 포함하고 있으며, 정규 표현식(Regex)을 통해 원하는 정보를 추출할 수 있습니다. 단, 개인정보나 불법적인 데이터 수집은 절대 피해야 합니다.

실전 크롤링 예제: 부동산 정보 수집

이번에는 상하이 랴지아(Lianjia) 사이트에서 주택 매물 정보를 수집해보겠습니다. 각 항목별로 제목, 위치, 가격 등의 데이터를 추출합니다.

제목 추출하기


import re

response = requests.get('https://sh.lianjia.com/ershoufang/pudong/')
titles = re.findall(r'<div class="title"><a.*?>(.*?)</a>', response.text)
print(titles)

다양한 정보 통합하기

다음 코드는 각 항목에 대한 자세한 정보를 추출하고 하나의 리스트로 묶습니다.


positions = re.findall(r'<a href=".*?" target="_blank" data-el="region">(.*?)</a>', response.text)
details = re.findall(r'<span class="houseInfo">(.*?)</span>', response.text)
prices = re.findall(r'<i></i><span>(.*?)</span>', response.text)

data_list = list(zip(titles, positions, details, prices))
for item in data_list:
    print(item)

다중 페이지 처리

여러 페이지를 순회하며 데이터를 수집할 수도 있습니다.


base_url = 'https://sh.lianjia.com/ershoufang/pudong/pg{}'
all_data = []

for page in range(1, 101):
    url = base_url.format(page)
    response = requests.get(url)
    
    titles = re.findall(r'<div class="title"><a.*?>(.*?)</a>', response.text)
    positions = re.findall(r'<a href=".*?" target="_blank" data-el="region">(.*?)</a>', response.text)
    details = re.findall(r'<span class="houseInfo">(.*?)</span>', response.text)
    prices = re.findall(r'<i></i><span>(.*?)</span>', response.text)
    
    all_data.extend(list(zip(titles, positions, details, prices)))

print(len(all_data), "개의 항목을 수집했습니다.")

엑셀 저장하기

수집된 데이터를 엑셀 파일로 저장하면 분석이나 보관이 용이합니다. 이를 위해 openpyxl 모듈을 사용합니다.


from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "부동산 정보"

# 헤더 작성
ws.append(["제목", "위치", "상세 정보", "가격"])

# 데이터 추가
for row in all_data:
    ws.append(row)

# 파일 저장
wb.save("부동산_정보_목록.xlsx")

고급 엑셀 작업 예시

엑셀 파일에 더 복잡한 데이터를 작성하거나 서식을 적용할 수도 있습니다.


ws["A1"] = "샘플 데이터"
ws.cell(row=2, column=1, value=100)
ws.append([1, "John Doe", 25, "Engineer"])
ws["D5"] = "=SUM(D2:D4)"

wb.save("고급_샘플.xlsx")

태그: python web_crawling openpyxl

6월 21일 21:06에 게시됨