์ง์ญ๊ตฌ ๊ด๋ด ์ด·์ค·๊ณ ๋ฑํ๊ต์ ๊ณต๋ฌธ์ ๋ณด๋ผ ์ผ์ด ์๊ฒผ๋ค.
ํ์ง๋ง, ์๋๋ณ ๊ตฌ๋ถ๋ ์๋๊ณ ํน์ ์ ๊ฑฐ ์ง์ญ๊ตฌ์ ์์ฌํ ํ๊ต ๋ฐ์ดํฐ๋ ์กด์ฌํ์ง ์์๋ค.
๋ฌธ์ ๋ฅผ ์ ๋ฆฌํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ถํ ๊ฒฝํ์ ๊ณต์ ํ๊ณ ์ ํ๋ค.
1. TASK
ํน์ ์ง์ญ๊ตฌ์ ์๋ ์ด๋ฑํ๊ต, ์คํ๊ต, ๊ณ ๋ฑํ๊ต์ ๋ฆฌ์คํธ๋ฅผ ์ถ์ถํ๋ค. FAX ๋ฒํธ๋ ํ์ํ๋ค.
2. DATA SOURCE
๊ฒฝ๊ธฐ๋ํ์ฑ์ค์ฐ๊ต์ก์ง์์ฒญ ๊ด๋ดํ๊ตํํฉ (์์ ๋ค์ด๋ก๋)
3. APPROACH
์ง๋ฒ ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํํฐ๋งํ๋ค.
์๋ฅผ ๋ค์ด, ์ง๋ฒ ์ฃผ์์ ๋ณ์ ๋์ด ์ธ๊ธ๋๋ฉด ํ์ฑ๋ณ ์ง์ญ๊ตฌ์ ์์ฌํ ํ๊ต์ด๋ค.
4. PROBLEM
๋ฌธ์ ๋ ๊ต์ก์ง์์ฒญ์์ ์ ๊ณตํ๋ ์์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ๋๋ก๋ช ์ฃผ์๊ฐ ๊ธฐ์ฌ๋์ด ์๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ์ง๋ฒ ์ฃผ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ด ํ์ํ๋, ํ์ฑ๊ณผ ์ค์ฐ ์ฐํ์ ์ด, ์ค, ๊ณ ๋ฑํ๊ต๊ฐ 230๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์์์ ์ ์กฐ๊ธ ํ๋ค๋ค...
GPT๋ ์ฌ์ฉ์ ์๋ํ์์ผ๋, API key๋ฅผ ๋ฌ๋ผ๊ณ ํ๋ค. ์ถ์ฒํด ์ค API ๋ฌธ์๋ฅผ ๋๋ฌ๋ณด๋, ๋๋ก๋ช ์ฃผ์ → ์ง๋ฒ ์ฃผ์๋ฅผ ์๊ณ ์ถ์ ๋์ ๋์ฆ์๋ ๊ฒฐ์ด ๋ฌ๋ผ์ ์๋ํ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ ธ์ ์ ํ์๋ค.
import requests
from bs4 import BeautifulSoup
def get_result_address(roadNameAddress: str) -> str:
urlBase = "https://www.juso.go.kr/support/AddressMainSearch.do?searchKeyword="
roadNameAddress = roadNameAddress.replace(" ", "+")
try:
# URL์ GET ์์ฒญ ๋ณด๋ด๊ธฐ
response = requests.get(urlBase + roadNameAddress)
response.raise_for_status() # HTTP ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ ์์ธ ๋ฐ์
# HTML ํ์ฑ
soup = BeautifulSoup(response.text, 'html.parser')
# ํด๋์ค๊ฐ 'mark type_2'์ธ ์์ ์ ํ
mark_element = soup.select_one('.mark.type_2')
if mark_element and mark_element.find_next_sibling():
# ๋ค์ ํ์ ์์์ ํ
์คํธ ๊ฐ์ ธ์ค๊ธฐ
lot_address = mark_element.find_next_sibling().get_text(strip=True)
# ํญ๊ณผ ์ค๋ฐ๊ฟ ์ ๊ฑฐ
result_address = lot_address.replace('\t', '').replace('\n', '')
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
if result_address:
return result_address
else:
raise ValueError("์ผ์นํ๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.")
else:
raise ValueError("์ผ์นํ๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.")
except Exception as e:
return f"์๋ฌ ๋ฐ์: {e}"
# ํจ์ ์ฌ์ฉ ์์
query = "๊ฒฝ๊ธฐ๋ ์ค์ฐ์ ์์ฒญ๋ก 204-20"
print(get_result_address(query))
Dependency: request, beautifulsoup4
๋ธ๊น ๋ช ๋ฒ๊ณผ ์ฝ๊ฐ์ ์ฝ๋ ์์ ์ผ๋ก ๊ธ๋ฐฉ ์ฝ๋๋ฅผ ๋ง๋ค์๋ค.
regex๊ฐ ์๋ํ์ง ์๋ ์์ธ๋ ์๋์ ๊ฐ์ด ์ฐํธ๋ฒํธ๊ฐ ๋ณ๊ธฐ๋์ด ์๋ ๊ฒฝ์ฐ์๋ค.
๊ฒฝ๊ธฐ๋ ์ค์ฐ์ ์ธ๋ง๋ฌธํ๋ก 45 ์ฐํธ๋ฒํธ 18102 |
์ง์ญ๊ตฌ ๋์ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ๊ณ ๋จ์ ๊ฒ์ FAX ๋ฒํธ ์ถ์ถ์ธ๋ฐ, ํ์์ด ๋๋ฌด ๋ณต์กํ๋ค ๐ญ
๊ฒฐ๊ตญ regex๋ก ํ๊ธฐ์๋ ์ญ๋ถ์กฑํ๋ค๊ณ ํ๋จํ์ฌ, 60์ฌ ๊ฐ๊ต์ FAX ๋ฒํธ๋ ์๋์ผ๋ก Ctrl+C, Ctrl+V ํ๋ค.
๋ค์ ์ ๊ฑฐ ์ง์ญ๊ตฌ ์์ฌ์ ํ๊ต๋ฅผ ์ ๋ฆฌํ๋ฉฐ, ๊ธฐ์กด ๋ฐ์ดํฐ์์ ๋๋ฝ๋์๋ 27๊ฐ๊ต๋ฅผ ์ถ๊ฐ๋ก ํ์ ํ๊ณ , FAX ๋ฒํธ๊น์ง (๊ทธ๋๋ง) ๋น ๋ฅด๊ฒ ์์งํ ์ ์์๋ค!
์ ์ฒด ์ฝ๋๋ ์๋ Github ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์ ๐
Github Repository ๋ฐ๋ก๊ฐ๊ธฐ
GitHub - inthree3/get-lot-number-address: ๋๋ก๋ช ์ฃผ์ → ์ง๋ฒ ์ฃผ์ ๋ณํ๊ธฐ
๋๋ก๋ช ์ฃผ์ → ์ง๋ฒ ์ฃผ์ ๋ณํ๊ธฐ. Contribute to inthree3/get-lot-number-address development by creating an account on GitHub.
github.com
โป ์น๋ช ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค.
1. ์๋ฅผ ๋ค์ด, ๋ฌธ๋๊ณผ ์ผ๋ฌธ๋์ ๋ค๋ฅธ ์ง์ญ์ธ๋ฐ ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ์ target์ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํด๋นํ๋ค๊ณ ํ๋จํ๋ค.
2. ์๊ฐ ๋ค๋ฅธ๋ฐ ๋ ์ด๋ฆ๋ง ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ณด๋, ๋๋ฝ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ์ผ๋ก ํ์ ๋์๋ค.
๐ญ๐ญ๐ญ
'๐ป ์ปดํจํฐ๊ณตํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
encodeURI()๋ ์ ๋ง๋ค์ด์ก์๊น? (0) | 2025.02.04 |
---|---|
[์๋ฌ] typescript ์คํ ์, ์ถ๋ ฅ ๋ฉ์ธ์ง ๊นจ์ง๋ ํ์ (0) | 2024.11.17 |
[ํ ์ค ๋ชจ๋ฅ๋ถ] ๋ชจ๋ฅ๋ถ์์ ์ธ๊ธ๋ 'Five Lines of Codes' ๋ฆฌ๋ทฐ (0) | 2024.11.14 |
[ํ ์ค ๋ชจ๋ฅ๋ถ] ํ ์ค ํ๋ก ํธ์๋ ์ฑํฐ๊ฐ ์ ์ํ๋ ์ฝ๋ ํ์ง (0) | 2024.11.13 |
์ 54ํ SQLD ๋ ํ ์ค๋น/์์ ํ๊ธฐ (0) | 2024.08.24 |