Guidelines

BBC λ‰΄μŠ€ 기사 제λͺ© μΆ”μΆœν•˜κΈ°

맀일 μ•„μΉ¨ μ „ 세계 μ΅œμ‹  λ‰΄μŠ€λ₯Ό μžλ™μœΌλ‘œ μˆ˜μ§‘ν•˜κ³ , λ‚΄ μ΄λ©”μΌλ‘œ μžλ™μœΌλ‘œ μ „μ†‘λ°›λŠ”λ‹€λ©΄ μ–Όλ§ˆλ‚˜ νŽΈν• κΉŒμš”?

μ΄λŸ¬ν•œ 일을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것이 λ°”λ‘œ μ›Ή ν¬λ‘€λ§μž…λ‹ˆλ‹€.

이번 μˆ˜μ—…μ—μ„œλŠ” BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ—μ„œ μ΅œμ‹  기사 제λͺ©μ„ μΆ”μΆœν•˜λŠ” μ‹€μ „ ν”„λ‘œμ νŠΈλ₯Ό 진행해 λ³΄κ² μŠ΅λ‹ˆλ‹€.


Requests와 BeautifulSoup 볡슡

μ›Ή νŽ˜μ΄μ§€μ—μ„œ 정적 데이터(JavaScript둜 μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” κ³ μ •λœ 데이터)λ₯Ό κ°€μ Έμ˜¬ λ•ŒλŠ” 주둜 requests와 BeautifulSoup 라이브러리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

requestsλŠ” μ›Ή νŽ˜μ΄μ§€μ—μ„œ HTML μ½”λ“œλ₯Ό κ°€μ Έμ˜€λŠ” 라이브러리이며, BeautifulSoupλŠ” HTML μ½”λ“œλ₯Ό 뢄석해 ν•„μš”ν•œ 정보λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.


requests둜 BBC λ‰΄μŠ€μ— μ ‘μ†ν•˜κΈ°

μ›Ήμ‚¬μ΄νŠΈμ—μ„œ 제λͺ©μ„ μΆ”μΆœν•˜λ €λ©΄ λ¨Όμ € requests 라이브러리λ₯Ό ν™œμš©ν•΄ HTML 데이터λ₯Ό 가져와야 ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ— μš”μ²­μ„ 보내고, μ •μƒμ μœΌλ‘œ μš”μ²­μ΄ μ΄λ£¨μ–΄μ‘ŒλŠ”μ§€ ν™•μΈν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

BBC λ‰΄μŠ€ νŽ˜μ΄μ§€ μš”μ²­ μ½”λ“œ
import requests # BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ— μš”μ²­ 보내기 url = "https://www.bbc.com/news" response = requests.get(url) # μš”μ²­ 성곡 μ—¬λΆ€ 확인 print("status_code:", response.status_code)

response.status_codeκ°€ 200이면 μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ 이루어진 κ²ƒμž…λ‹ˆλ‹€.


BeautifulSoup으둜 HTML 데이터 λΆ„μ„ν•˜κΈ°

μ„œλ²„λ‘œλΆ€ν„° 받은 HTML λ°μ΄ν„°λŠ” κ·Έ μžμ²΄λ‘œλŠ” λ¬΄μ˜λ―Έν•œ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.

이 데이터λ₯Ό 의미 있게 λΆ„μ„ν•˜λ €λ©΄ BeautifulSoup을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

BeautifulSoup은 HTML ꡬ쑰λ₯Ό λΆ„μ„ν•˜κ³ , νŠΉμ • νƒœκ·Έμ— λ‹΄κΈ΄ 데이터λ₯Ό μ†μ‰½κ²Œ μΆ”μΆœν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

BeautifulSoup으둜 HTML λΆ„μ„ν•˜κΈ°
from bs4 import BeautifulSoup import requests # BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ— μš”μ²­ 보내기 url = "https://www.bbc.com/news" response = requests.get(url) # μš”μ²­ 성곡 μ—¬λΆ€ 확인 print("status_code:", response.status_code) # HTML 데이터 νŒŒμ‹± soup = BeautifulSoup(response.text, "html.parser") # νŽ˜μ΄μ§€μ—μ„œ h2 νƒœκ·Έλ‘œ 기사 제λͺ© 10개 μΆ”μΆœ titles = soup.find_all('h2', limit=10) # 번호 및 기사 제λͺ© 좜λ ₯ # enumerate() ν•¨μˆ˜λ‘œ 인덱슀 번호λ₯Ό ν•¨κ»˜ κ°€μ Έμ˜΄ for idx, title in enumerate(titles): print(f"{idx+1}. {title.text}")

μœ„ μ½”λ“œλŠ” h2 νƒœκ·Έμ— λ‹΄κΈ΄ ν…μŠ€νŠΈλ₯Ό λͺ¨λ‘ μ°Ύμ•„ 좜λ ₯ν•©λ‹ˆλ‹€.

BBC λ‰΄μŠ€ ν™ˆνŽ˜μ΄μ§€μ—μ„œ 기사 제λͺ©μ€ 주둜 h2 νƒœκ·Έλ‘œ μž‘μ„±λ˜λ―€λ‘œ find_all('h2')둜 기사 제λͺ©μ„ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이번 μˆ˜μ—…μ—μ„œλŠ” Requests둜 μ›Ή νŽ˜μ΄μ§€μ— μš”μ²­μ„ 보내고, BeautifulSoup으둜 HTML 데이터λ₯Ό 뢄석해 BBC λ‰΄μŠ€μ˜ 기사 제λͺ©μ„ μΆ”μΆœν•˜λŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€.

λ‹€μŒ μˆ˜μ—…μ—μ„œλŠ” μ΄λ ‡κ²Œ μΆ”μΆœν•œ 데이터λ₯Ό CSV 파일둜 μ €μž₯ν•˜λŠ” 방법을 배우게 λ©λ‹ˆλ‹€.

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result