Skip to content

Commit fd18087

Browse files
authored
하나은행 홈페이지 환율 크롤링
1 parent 4da646d commit fd18087

File tree

1 file changed

+279
-0
lines changed

1 file changed

+279
-0
lines changed
Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 22,
6+
"id": "bdff5bc5",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"#!pip install selenium==4.1.5\n",
11+
"#!pip install webdriver_manager\n",
12+
"\n",
13+
"import selenium\n",
14+
"from selenium import webdriver\n",
15+
"from selenium.webdriver.chrome.service import Service # chromedriver 자동설치\n",
16+
"from webdriver_manager.chrome import ChromeDriverManager #chromedriver 자동설치\n",
17+
"from selenium.webdriver.common.by import By\n",
18+
"from selenium.webdriver.support.ui import WebDriverWait\n",
19+
"from selenium.webdriver.support import expected_conditions as EC\n",
20+
"service = Service(executable_path=ChromeDriverManager().install())\n",
21+
"driver = webdriver.Chrome(service=service)"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": 20,
27+
"id": "4c10ae34",
28+
"metadata": {},
29+
"outputs": [],
30+
"source": [
31+
"# 인터넷 열기\n",
32+
"driver = webdriver.Chrome(service=service)"
33+
]
34+
},
35+
{
36+
"cell_type": "code",
37+
"execution_count": 32,
38+
"id": "04c864bc",
39+
"metadata": {},
40+
"outputs": [],
41+
"source": [
42+
"#driver.get('https://www.kebhana.com/cont/mall/mall15/mall1501/index.jsp?_menuNo=23100#//HanaBank')\n",
43+
"driver.get('https://www.kebhana.com/cms/rate/wpfxd651_01i_01.do?tmpInqStrDt=2023-03-25&pbldDvCd=3&inqStrDt=20230325&inqKindCd=1')"
44+
]
45+
},
46+
{
47+
"cell_type": "code",
48+
"execution_count": 33,
49+
"id": "6981574d",
50+
"metadata": {},
51+
"outputs": [],
52+
"source": [
53+
"exchange_rate_table = driver.find_elements(By.CLASS_NAME, \"tblBasic\")\n",
54+
"print(exchange_rate_table)"
55+
]
56+
},
57+
{
58+
"cell_type": "code",
59+
"execution_count": 40,
60+
"id": "34092b5c",
61+
"metadata": {},
62+
"outputs": [
63+
{
64+
"name": "stdout",
65+
"output_type": "stream",
66+
"text": [
67+
"<selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"f1a3f5a7-21c4-4cfe-8e61-9775bb689b83\")>\n"
68+
]
69+
}
70+
],
71+
"source": [
72+
"tbody = exchange_rate_table[0].find_element(By.TAG_NAME, \"tbody\")\n",
73+
"print(tbody)"
74+
]
75+
},
76+
{
77+
"cell_type": "code",
78+
"execution_count": 41,
79+
"id": "fb42a702",
80+
"metadata": {},
81+
"outputs": [
82+
{
83+
"name": "stdout",
84+
"output_type": "stream",
85+
"text": [
86+
"[<selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"8ccc1b3e-4c46-4244-8f30-d35b58083318\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"a92ec5a4-a6cf-438a-a022-2733fb798cbf\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"bbcfd73f-6b22-4c30-863f-67ebf3d8aafe\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"64edfac2-dc8d-43ac-8c56-0660fc6e8546\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"11ffc463-b6a9-43e5-8102-c9d29a1a5a67\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"e7175eff-13da-4019-86a5-8abfd74a1e84\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"91d918b3-9573-4512-803d-051270050368\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"7d7f17d9-4845-42ca-8f6f-959bad5c874c\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"631d3e3b-53a0-46aa-921f-3f6e39298a95\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"68ca37b6-c3fa-4e4b-830e-ad63df19e63f\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"1395e41c-4be2-4860-a6e5-c86b27728e87\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"3d9e1848-b89c-4fe0-a02c-2f20e0b9bcff\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"18e62cc7-ed42-4ecc-91b1-2f105e7f3457\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"a25d5c05-fb7b-4749-9df3-73cfe3dcfa82\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"c5741516-e2b7-4b74-8911-606ba48d1883\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"803e5e29-0e78-4fcd-a1f0-454ead680f2a\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"97b82c24-cbef-439e-a43c-3d464d93fcba\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"de600202-ba4f-486a-9ded-d65d39f5551b\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"688c1563-bce0-4140-8c47-619e0f149064\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"983ecea8-ee2c-45a9-8ef9-bf05f893ce58\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"1a317dd7-0812-427e-ad29-b6bda2fa32db\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"e9b80704-ac17-45c5-8026-aca049341b61\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"dee7cfb5-3008-47bf-bf9f-880afc6810c8\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"e2b80751-be24-4219-9944-0852972b7a1f\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"a599d8a0-8e82-4a78-a10a-f289908db305\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"233e616c-6cb0-47fa-bdd7-1d59ee1ac2ee\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"8785c391-02b5-4f6f-9729-c62052539d7f\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"1a9e23d1-88ea-47a5-9dec-45d161e1adba\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"48d339f0-e653-4947-acd1-673fd5503c78\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"09630711-3ba3-4bee-96a6-6c80ee348885\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"a0173cce-0170-4f93-bc67-afe7b238c327\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"16f42006-c06d-4fa1-ad0f-06a5d7b49607\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"3e8cf7d1-6ed1-44cf-a4c9-77c8dfa756d6\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"69ceadba-11c0-4113-8a9b-dd0a82fb4276\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"81e27150-2501-49f9-bced-faf153fa18a1\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"58c7af13-6f95-4805-a5f8-8835146edcab\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"fe9bde70-c0a4-4feb-a69c-3f2cd49450e9\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"c2a9d73f-772a-4698-900e-81aa5e7792c2\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"3d8b21c3-ece1-4aba-935b-c011ba67dca0\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"2a5dda43-3182-4ad1-9d49-683ba6c4df0b\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"b36ab42b-2c47-4657-ba33-f1d6b7aece8a\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"413959aa-1a9a-4f8b-af08-af833803f9ee\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"81289ea7-736f-4c92-9956-01d92c30ea10\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"1caa984b-2eba-4217-a9a3-a8ee18a8f553\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"5eb49ef0-ba0c-4a07-9428-9c945fd919a8\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"39620c77-f360-46d4-b1fb-49d851650ad3\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"7e299e32-140a-41ec-8d0e-f9b7b295f862\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"270b9ae4-cb77-4c2c-ba42-aecf9be08968\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"886cd0f7-09ff-4bcd-8ed2-35153574ee93\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"9fdcb955-0606-46fd-abf4-56a8a413014f\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"f1cec7d9-6ee0-4756-aed4-cda1c13e5edf\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"915bdb11-a94c-4405-93eb-65e0d68bccb8\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"de72a34c-5580-4248-a788-aed40ecd9142\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"3e71da13-ae9e-4fd9-a3ab-5aff52e7188b\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"af5d57f2-d7f4-4b3f-9240-1d771ad5687c\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"32ee1b4b-715b-4652-90a6-73013bfa7511\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"1bd9272e-7d07-4fed-8a34-3251fc66088d\")>, <selenium.webdriver.remote.webelement.WebElement (session=\"bfed9edb586b2db67940b9c590ad6d8a\", element=\"45abda69-5556-4952-b866-4967d194ae5c\")>]\n"
87+
]
88+
}
89+
],
90+
"source": [
91+
"tr = tbody.find_elements(By.TAG_NAME, \"tr\")\n",
92+
"print(tr)"
93+
]
94+
},
95+
{
96+
"cell_type": "code",
97+
"execution_count": 49,
98+
"id": "5e2a61a2",
99+
"metadata": {},
100+
"outputs": [
101+
{
102+
"name": "stdout",
103+
"output_type": "stream",
104+
"text": [
105+
"미국 USD 1,300.00\n",
106+
"일본 JPY (100) 994.53\n",
107+
"유로 EUR 1,398.93\n",
108+
"중국 CNY 189.23\n",
109+
"홍콩 HKD 165.61\n",
110+
"태국 THB 38.02\n",
111+
"대만 TWD 42.85\n",
112+
"필리핀 PHP 23.95\n",
113+
"싱가포르 SGD 976.16\n",
114+
"호주 AUD 864.11\n",
115+
"베트남 VND (100) 5.53\n",
116+
"영국 GBP 1,589.77\n",
117+
"캐나다 CAD 946.14\n",
118+
"말레이시아 MYR 293.59\n",
119+
"러시아 RUB 16.82\n",
120+
"남아공화국 ZAR 71.55\n",
121+
"노르웨이 NOK 123.95\n",
122+
"뉴질랜드 NZD 806.13\n",
123+
"덴마크 DKK 187.72\n",
124+
"멕시코 MXN 70.46\n",
125+
"몽골 MNT 0.37\n",
126+
"바레인 BHD 3,447.54\n",
127+
"방글라데시 BDT 12.37\n",
128+
"브라질 BRL 247.48\n",
129+
"브루나이 BND 976.16\n",
130+
"사우디아라비아 SAR 346.06\n",
131+
"스리랑카 LKR 4.04\n",
132+
"스웨덴 SEK 124.68\n",
133+
"스위스 CHF 1,413.73\n",
134+
"아랍에미리트공화국 AED 353.99\n",
135+
"알제리 DZD 9.55\n",
136+
"오만 OMR 3,376.80\n",
137+
"요르단 JOD 1,832.66\n",
138+
"이스라엘 ILS 362.08\n",
139+
"이집트 EGP 42.07\n",
140+
"인도 INR 15.78\n",
141+
"인도네시아 IDR (100) 8.60\n",
142+
"체코 CZK 59.08\n",
143+
"칠레 CLP 1.60\n",
144+
"카자흐스탄 KZT 2.84\n",
145+
"카타르 QAR 357.14\n",
146+
"케냐 KES 9.89\n",
147+
"콜롬비아 COP 0.27\n",
148+
"쿠웨이트 KWD 4,246.01\n",
149+
"탄자니아 TZS 0.56\n",
150+
"터어키 TRY 68.19\n",
151+
"파키스탄 PKR 4.60\n",
152+
"폴란드 PLN 298.40\n",
153+
"헝가리 HUF 3.63\n",
154+
"네팔 NPR 9.85\n",
155+
"마카오 MOP 160.67\n",
156+
"캄보디아 KHR 0.32\n",
157+
"피지 FJD 586.04\n",
158+
"리비아 LYD 273.18\n",
159+
"루마니아 RON 283.81\n",
160+
"미얀마 MMK 0.62\n",
161+
"에티오피아 ETB 24.13\n",
162+
"우즈베키스탄 UZS 0.11\n"
163+
]
164+
}
165+
],
166+
"source": [
167+
"nation = []\n",
168+
"exrate = []\n",
169+
"for item in tr:\n",
170+
" td = item.find_elements(By.TAG_NAME, \"td\")\n",
171+
" print(td[0].text, td[9].text)\n",
172+
" nation.append(td[0].text)\n",
173+
" exrate.append(td[9].text)"
174+
]
175+
},
176+
{
177+
"cell_type": "code",
178+
"execution_count": 51,
179+
"id": "15194fab",
180+
"metadata": {},
181+
"outputs": [
182+
{
183+
"name": "stdout",
184+
"output_type": "stream",
185+
"text": [
186+
" 국가 환율\n",
187+
"0 미국 USD 1,300.00\n",
188+
"1 일본 JPY (100) 994.53\n",
189+
"2 유로 EUR 1,398.93\n",
190+
"3 중국 CNY 189.23\n",
191+
"4 홍콩 HKD 165.61\n",
192+
"5 태국 THB 38.02\n",
193+
"6 대만 TWD 42.85\n",
194+
"7 필리핀 PHP 23.95\n",
195+
"8 싱가포르 SGD 976.16\n",
196+
"9 호주 AUD 864.11\n",
197+
"10 베트남 VND (100) 5.53\n",
198+
"11 영국 GBP 1,589.77\n",
199+
"12 캐나다 CAD 946.14\n",
200+
"13 말레이시아 MYR 293.59\n",
201+
"14 러시아 RUB 16.82\n",
202+
"15 남아공화국 ZAR 71.55\n",
203+
"16 노르웨이 NOK 123.95\n",
204+
"17 뉴질랜드 NZD 806.13\n",
205+
"18 덴마크 DKK 187.72\n",
206+
"19 멕시코 MXN 70.46\n",
207+
"20 몽골 MNT 0.37\n",
208+
"21 바레인 BHD 3,447.54\n",
209+
"22 방글라데시 BDT 12.37\n",
210+
"23 브라질 BRL 247.48\n",
211+
"24 브루나이 BND 976.16\n",
212+
"25 사우디아라비아 SAR 346.06\n",
213+
"26 스리랑카 LKR 4.04\n",
214+
"27 스웨덴 SEK 124.68\n",
215+
"28 스위스 CHF 1,413.73\n",
216+
"29 아랍에미리트공화국 AED 353.99\n",
217+
"30 알제리 DZD 9.55\n",
218+
"31 오만 OMR 3,376.80\n",
219+
"32 요르단 JOD 1,832.66\n",
220+
"33 이스라엘 ILS 362.08\n",
221+
"34 이집트 EGP 42.07\n",
222+
"35 인도 INR 15.78\n",
223+
"36 인도네시아 IDR (100) 8.60\n",
224+
"37 체코 CZK 59.08\n",
225+
"38 칠레 CLP 1.60\n",
226+
"39 카자흐스탄 KZT 2.84\n",
227+
"40 카타르 QAR 357.14\n",
228+
"41 케냐 KES 9.89\n",
229+
"42 콜롬비아 COP 0.27\n",
230+
"43 쿠웨이트 KWD 4,246.01\n",
231+
"44 탄자니아 TZS 0.56\n",
232+
"45 터어키 TRY 68.19\n",
233+
"46 파키스탄 PKR 4.60\n",
234+
"47 폴란드 PLN 298.40\n",
235+
"48 헝가리 HUF 3.63\n",
236+
"49 네팔 NPR 9.85\n",
237+
"50 마카오 MOP 160.67\n",
238+
"51 캄보디아 KHR 0.32\n",
239+
"52 피지 FJD 586.04\n",
240+
"53 리비아 LYD 273.18\n",
241+
"54 루마니아 RON 283.81\n",
242+
"55 미얀마 MMK 0.62\n",
243+
"56 에티오피아 ETB 24.13\n",
244+
"57 우즈베키스탄 UZS 0.11\n"
245+
]
246+
}
247+
],
248+
"source": [
249+
"import pandas as pd\n",
250+
"\n",
251+
"df = pd.DataFrame({'국가':nation, '환율':exrate})\n",
252+
"print(df)\n",
253+
"\n",
254+
"df.to_excel(\"hanabank_exchange_rate.xlsx\")"
255+
]
256+
}
257+
],
258+
"metadata": {
259+
"kernelspec": {
260+
"display_name": "Python 3",
261+
"language": "python",
262+
"name": "python3"
263+
},
264+
"language_info": {
265+
"codemirror_mode": {
266+
"name": "ipython",
267+
"version": 3
268+
},
269+
"file_extension": ".py",
270+
"mimetype": "text/x-python",
271+
"name": "python",
272+
"nbconvert_exporter": "python",
273+
"pygments_lexer": "ipython3",
274+
"version": "3.9.13"
275+
}
276+
},
277+
"nbformat": 4,
278+
"nbformat_minor": 5
279+
}

0 commit comments

Comments
 (0)