크롤링 데이터 → 판다스 DataFrame

c.haha.e·2025년 8월 12일

pandas

목록 보기
17/17

크롤링 데이터 → 판다스 DataFrame 만드는 법


1. 크롤링 결과가 “리스트(딕셔너리)” 형태라면

(가장 표준적인, “파싱된 데이터” 형태)

예시:

data = [
    {'제목':'뉴스1', '링크':'url1', '날짜':'2024-01-01'},
    {'제목':'뉴스2', '링크':'url2', '날짜':'2024-01-02'},
    ...
]
import pandas as pd
df = pd.DataFrame(data)
  • 리스트 안에 각 행(딕셔너리) → 한 번에 DF로 변환
  • 크롤링 라이브러리(requests, BeautifulSoup, selenium, API 등)로 데이터를 파싱해 딕셔너리(사전)로 모았다면 가장 쉽게 DataFrame 생성!

2. 크롤링 결과가 “리스트(리스트)” 형태라면

예시:

data = [
    ['뉴스1', 'url1', '2024-01-01'],
    ['뉴스2', 'url2', '2024-01-02'],
    ...
]
df = pd.DataFrame(data, columns=['제목', '링크', '날짜'])
  • 컬럼명만 따로 지정해주면 됨

3. 크롤링 결과가 “문자열(텍스트)”일 때

(ex. 태그, 텍스트 덩어리, 라인별 문장 등)

(1) 라인별로 리스트로 쪼개기

lines = [
    "뉴스1, url1, 2024-01-01",
    "뉴스2, url2, 2024-01-02"
]
data = [line.split(', ') for line in lines]
df = pd.DataFrame(data, columns=['제목', '링크', '날짜'])

(2) HTML 태그 파싱

  • BeautifulSoup 등으로 원하는 정보 추출 → 리스트/딕셔너리로 만든 후 DF
from bs4 import BeautifulSoup
import requests
import pandas as pd

html = requests.get('https://news.ycombinator.com/').text
soup = BeautifulSoup(html, 'html.parser')
titles = [tag.text for tag in soup.select('.titleline a')]
links = [tag['href'] for tag in soup.select('.titleline a')]
df = pd.DataFrame({'제목': titles, '링크': links})
  • 딕셔너리/리스트로 만든 후 DataFrame

4. API에서 받아온 JSON 데이터일 때

import requests
import pandas as pd

r = requests.get('https://jsonplaceholder.typicode.com/posts')
data = r.json()  # 리스트(딕셔너리) 형태로 변환됨
df = pd.DataFrame(data)

5. 실무 꿀팁 & 체크포인트

  • 크롤링 데이터는 구조가 일정하지 않을 때가 많음 → 최대한 리스트/딕셔너리 형태로 정리해서 DataFrame으로 변환!
  • 컬럼명이 다를 때columns=[...] 옵션 사용
  • 결측/오류 데이터 처리 필요 → DataFrame 생성 후 결측치/이상치 처리 진행

6. 크롤링~DF 변환 한 번에 예시

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://news.ycombinator.com/'
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')

# 데이터 추출
titles = [tag.text for tag in soup.select('.titleline a')]
links = [tag['href'] for tag in soup.select('.titleline a')]

# DataFrame 변환
df = pd.DataFrame({'제목': titles, '링크': links})
print(df.head())

정리

  • 리스트(딕셔너리/리스트) → 바로 DataFrame
  • BeautifulSoup, Selenium 등에서 텍스트/태그 → 파싱 → 리스트화 → DF
  • API/JSON 데이터pd.DataFrame(data) 바로 가능
profile
기록용 블로그

0개의 댓글