Guidelines

μœ„ν‚€ν”Όλ””μ•„μ—μ„œ μ›ν•˜λŠ” 정보 κ°€μ Έμ˜€κΈ°

이번 μˆ˜μ—…μ—μ„œλŠ” νŒŒμ΄μ¬μ„ μ‚¬μš©ν•΄ μœ„ν‚€ν”Όλ””μ•„μ˜ '인터넷' νŽ˜μ΄μ§€μ—μ„œ 데이터λ₯Ό ν¬λ‘€λ§ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

특히 νŽ˜μ΄μ§€μ˜ 제λͺ©κ³Ό λ³Έλ¬Έμ—μ„œ νŠΉμ • 단락듀을 μΆ”μΆœν•˜κ³ , ν•œκΈ€ 데이터λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ²˜λ¦¬ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€.


μ›Ή νŽ˜μ΄μ§€ κ°€μ Έμ˜€κΈ°

λ¨Όμ €, requests νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•΄ μœ„ν‚€ν”Όλ””μ•„μ˜ '인터넷' νŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

requests.get() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ ν•΄λ‹Ή νŽ˜μ΄μ§€μ˜ HTML μ†ŒμŠ€λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

μ›Ή νŽ˜μ΄μ§€ κ°€μ Έμ˜€κΈ°
import requests # URL μ„€μ • url = 'https://ko.wikipedia.org/wiki/인터넷' # μ›Ή νŽ˜μ΄μ§€ κ°€μ Έμ˜€κΈ° response = requests.get(url) # 응닡 μƒνƒœ μ½”λ“œ 확인 print("status_code:", response.status_code)
  • url λ³€μˆ˜μ— 크둀링할 νŽ˜μ΄μ§€μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

  • requests.get(url)은 ν•΄λ‹Ή URL의 HTML μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

  • response.status_codeλŠ” μš”μ²­μ΄ μ„±κ³΅ν–ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μƒνƒœ μ½”λ“œ 200은 μš”μ²­μ΄ μ„±κ³΅ν–ˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.


HTML νŒŒμ‹± 및 제λͺ© μΆ”μΆœ

HTML을 νŒŒμ‹±ν•˜κ³ , νŽ˜μ΄μ§€μ˜ 제λͺ©μ„ μΆ”μΆœν•©λ‹ˆλ‹€.

BeautifulSoup을 μ‚¬μš©ν•΄ HTML ꡬ쑰λ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€.

HTML νŒŒμ‹± 및 제λͺ© μΆ”μΆœ
from bs4 import BeautifulSoup # HTML νŒŒμ‹± soup = BeautifulSoup(response.text, 'html.parser') # νŽ˜μ΄μ§€ 제λͺ© κ°€μ Έμ˜€κΈ° title = soup.find('h1', id='firstHeading').text print("title:", title)
  • BeautifulSoup(response.text, 'html.parser')λŠ” HTML μ†ŒμŠ€λ₯Ό νŒŒμ‹±ν•©λ‹ˆλ‹€.

  • soup.find('h1', id='firstHeading').textλŠ” νŽ˜μ΄μ§€μ˜ 제λͺ©μ„ μΆ”μΆœν•©λ‹ˆλ‹€.


λ³Έλ¬Έ λ‚΄μš© μΆ”μΆœ

이제 λ³Έλ¬Έ λ‚΄μš©μ—μ„œ <p> νƒœκ·Έλ₯Ό λͺ¨λ‘ 가져와, κ·Έ 쀑 첫 5개의 단락을 μΆ”μΆœν•©λ‹ˆλ‹€.

λ³Έλ¬Έ λ‚΄μš© μΆ”μΆœ
# λ³Έλ¬Έ λ‚΄μš© 쀑 <p> νƒœκ·Έλ“€ λͺ¨λ‘ κ°€μ Έμ˜€κΈ° all_paragraphs = soup.find('div', class_='mw-parser-output').find_all('p') # 첫 5개의 <p> νƒœκ·Έλ§Œ μ„ νƒν•˜κΈ° paragraphs = all_paragraphs[:5] # μΆ”μΆœν•œ 단락듀을 ν•˜λ‚˜μ˜ ν…μŠ€νŠΈλ‘œ ν•©μΉ˜κΈ° content = "\n".join([p.text for p in paragraphs])
  • soup.find('div', class_='mw-parser-output').find_all('p')λŠ” λ³Έλ¬Έ λ‚΄ λͺ¨λ“  <p> νƒœκ·Έλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.

  • paragraphs = all_paragraphs[:5]λŠ” 첫 5개의 <p> νƒœκ·Έλ§Œ μ„ νƒν•©λ‹ˆλ‹€.

  • "\n".join([p.text for p in paragraphs])λŠ” μ„ νƒν•œ 단락듀을 ν•˜λ‚˜μ˜ ν…μŠ€νŠΈλ‘œ ν•©μΉ©λ‹ˆλ‹€.


ν•œκΈ€ 인코딩 문제 ν•΄κ²° 및 좜λ ₯

ν¬λ‘€λ§ν•œ ν•œκΈ€ 데이터λ₯Ό μ œλŒ€λ‘œ 좜λ ₯ν•˜κΈ° μœ„ν•΄ 인코딩(Encoding, λ¬Έμžμ—΄μ„ λ°”μ΄νŠΈλ‘œ λ³€ν™˜) 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

ν•œκΈ€ 인코딩 문제 ν•΄κ²°
# ν•œκΈ€ 인코딩 문제 ν•΄κ²° print("content:", content.encode('utf-8').decode('utf-8'))
  • content.encode('utf-8').decode('utf-8')λŠ” 좜λ ₯λ˜λŠ” ν•œκΈ€ 데이터가 μ œλŒ€λ‘œ 좜λ ₯λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

인코딩(encode)λŠ” λ¬Έμžμ—΄μ„ λ°”μ΄νŠΈ(byte, 0κ³Ό 1둜 이루어진 데이터)둜 λ³€ν™˜ν•˜κ³ , λ””μ½”λ”©(decode)은 λ°”μ΄νŠΈλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

이제 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μœ„ν‚€ν”Όλ””μ•„ '인터넷' νŽ˜μ΄μ§€μ˜ 제λͺ©κ³Ό λ³Έλ¬Έ λ‚΄μš©μ΄ 좜λ ₯λ©λ‹ˆλ‹€.

Mission
0 / 1

μ•„λž˜ λΉˆμΉΈμ— λ“€μ–΄κ°ˆ κ°€μž₯ μ μ ˆν•œ λ‚΄μš©μ€ λ¬΄μ—‡μΌκΉŒμš”?

은 νŠΉμ • URL의 HTML μ†ŒμŠ€λ₯Ό 뢈러올 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
requests.get()
BeautifulSoup()
urllib.request()
selenium.webdriver()

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result