Guidelines

정적인 μ£Όκ°€ 데이터λ₯Ό ν¬λ‘€λ§ν•˜λŠ” 방법

λ§Œμ•½ 주식 데이터가 정적인 ν˜•νƒœλ‘œ μ œκ³΅λœλ‹€λ©΄, μ‹€μŠ΅ ν™”λ©΄μ˜ μ˜ˆμ‹œμ™€ 같이 requests와 BeautifulSoup λΌμ΄λΈŒλŸ¬λ¦¬λ§ŒμœΌλ‘œλ„ μ›Ή 크둀링을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.

이번 μˆ˜μ—…μ—μ„œλŠ” 이 링크와 같은 가상 주식 데이터 ν‘œ λ‚΄λΆ€μ˜ 데이터λ₯Ό ν¬λ‘€λ§ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

νšŒμ‚¬λͺ…ν˜„μž¬κ°€μ „μΌλŒ€λΉ„λ“±λ½λ₯ 
νšŒμ‚¬ A1064262.44%
νšŒμ‚¬ B1458-35-2.40%
νšŒμ‚¬ C1991492.46%
νšŒμ‚¬ D2595220.85%
νšŒμ‚¬ E3074-36-1.17%
νšŒμ‚¬ F59820.33%

μ˜ˆμ‹œλ‘œ μ œμ‹œλœ ν‘œμ˜ λ°μ΄ν„°λŠ” μƒˆλ‘œκ³ μΉ¨μ„ ν•˜μ§€ μ•ŠλŠ” ν•œ λ³€ν•˜μ§€ μ•ŠλŠ” 정적인 λ°μ΄ν„°μž…λ‹ˆλ‹€.


μ½”λ“œ μ„€λͺ…

μ•žμ„œ 배운 requests와 BeautifulSoup 라이브러리λ₯Ό μ‚¬μš©ν•΄ 크둀링을 ν•˜λŠ” 과정은 λΉ„μŠ·ν•˜μ§€λ§Œ, response.encoding = "utf-8"을 톡해 ν•œκΈ€ 데이터λ₯Ό μ •μƒμ μœΌλ‘œ κ°€μ Έμ˜¬ 수 μžˆλ„λ‘ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ find("td", {"class": "company-cell"}), find_all("tr")와 같이 find λ©”μ„œλ“œ 심화 μ‚¬μš©λ²•μ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

Step 1

μ›Ή νŽ˜μ΄μ§€ HTML κ°€μ Έμ˜€κΈ°
response = requests.get(url) response.encoding = "utf-8" html_content = response.text
  • requests.get(url): μ§€μ •λœ URLλ‘œλΆ€ν„° μ›Ή νŽ˜μ΄μ§€μ˜ 데이터λ₯Ό μš”μ²­ν•˜κ³  응닡을 λ°›μŠ΅λ‹ˆλ‹€.
  • response.encoding = "utf-8": μ‘λ‹΅μ˜ 인코딩을 UTF-8둜 μ„€μ •ν•˜μ—¬ ν•œκΈ€ λ“±μ˜ λ¬Έμžκ°€ 깨지지 μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
  • html_content = response.text: μ‘λ‹΅μœΌλ‘œ 받은 HTML 컨텐츠λ₯Ό ν…μŠ€νŠΈλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.

Step 2

HTML νŒŒμ‹±
soup = BeautifulSoup(html_content, "html.parser")
  • BeautifulSoup 객체λ₯Ό μƒμ„±ν•˜μ—¬ HTML 컨텐츠λ₯Ό νŒŒμ‹±ν•©λ‹ˆλ‹€. 이둜써 HTML μš”μ†Œμ— μ‰½κ²Œ μ ‘κ·Όν•  수 있게 λ©λ‹ˆλ‹€.

Step 3

stock_table = soup.find("table", {"id": "stock-table"})
  • soup.find() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ HTMLμ—μ„œ 주식 데이터가 λ‹΄κΈ΄ ν…Œμ΄λΈ” μš”μ†Œ(<table id="stock-table">)λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

Step 4

ν…Œμ΄λΈ” λ‚΄ 데이터 μΆ”μΆœ
for row in stock_table.find("tbody").find_all("tr"):
  • stock_table.find("tbody").find_all("tr"): ν…Œμ΄λΈ”μ˜ <tbody> μ„Ήμ…˜ λ‚΄ λͺ¨λ“  ν–‰(<tr>)을 μˆœνšŒν•©λ‹ˆλ‹€.

각 ν–‰μ—μ„œ λ‹€μŒ 데이터λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€:

  • νšŒμ‚¬ 이름: class="company-cell" 클래슀λ₯Ό 가진 <td> μš”μ†Œμ˜ ν…μŠ€νŠΈμž…λ‹ˆλ‹€.
  • ν˜„μž¬ 가격: class="current-price-cell" 클래슀λ₯Ό 가진 <td> μš”μ†Œμ˜ ν…μŠ€νŠΈμž…λ‹ˆλ‹€.
  • 전일 λŒ€λΉ„ 가격 변동: class="diff-cell" 클래슀λ₯Ό 가진 <td> μš”μ†Œμ˜ ν…μŠ€νŠΈμž…λ‹ˆλ‹€.
  • 등락λ₯ : class="fluct-cell" 클래슀λ₯Ό 가진 <td> μš”μ†Œμ˜ ν…μŠ€νŠΈμž…λ‹ˆλ‹€.

Step 5

좜λ ₯
print(f"{company_name}: ν˜„μž¬κ°€ {current_price}, μ „μΌλŒ€λΉ„ {price_change}, 등락λ₯  {change_percentage}")
  • μΆ”μΆœν•œ 데이터λ₯Ό 포맷에 λ§žμΆ”μ–΄ 좜λ ₯ν•©λ‹ˆλ‹€.

μ‹€μŠ΅

ν™”λ©΄ 였λ₯Έμͺ½ μ½”λ“œ μ‹€ν–‰ λ²„νŠΌμ„ λˆ„λ₯΄κ³ , 크둀링 κ²°κ³Όλ₯Ό ν™•μΈν•˜κ±°λ‚˜ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄ λ³΄μ„Έμš”!

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result