HTML 스크래이핑으로 네이버 환율
사전준비
BeautifulSoup을 불러오기 위해,,,
1
2
!pip install bs4
html문자열은 파이썬에서 다뤄야 한다.
BeautifulSoup을 이용하여 html을 문자열 엘리먼트 객체로 바꿀 수 있다!- type이
BeautifulSoup임.
네이버 환율정보 가져오기
1
2
3
4
5
6
7
8
9
10
11
import requests
from bs4 import BeautifulSoup
url = "https://finance.naver.com/marketindex/"
response = requests.get(url)
page = response.content # content : 접속한 웹 서버의 응답을 문자열로 가져오는 속성
soup = BeautifulSoup(page, 'html.parser') # html.parser : 문서를 컴퓨터가 이해할 수 있는 구조로 변환
soup # 출력 결과 확인 및 어떻게 데이터에 접근할지 확인
필요한 데이터만 가져오기
1
2
exchange_list = soup.select("#exchangeList > li")
exchange_list
하나만 선택하여 스크래이핑 테스트 진행
- 실제로 현업에서 개발할 때, 이렇게 테스트를 먼저 해보고 개발.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 하나만 잡아서 스크래이핑 테스트
test_fin = exchange_list[0]
# 대상 화폐
test_fin.select_one("h3.blind").text
# 환율
float(test_fin.select_one("span.value").text.replace(",",""))
# 변동
float(test_fin.select_one("span.change").text)
# 결과 (하락)
test_fin.select_one("span.blind")[-1].text
# 결과
test_fin.select_one("span.change").nextSibling.nextSbling.text
테스트가 잘 됐으니 예쁘게 코딩하자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 필요한 데이터를 리스트에 저장
c_name_list = []
exchange_rate_list = []
change_list = []
updown_list = []
for exchange in exchange_list:
c_name = exchange.select_one("h3.h_lst").text
exchange_rate = float(exchange.select_one("span.value").text.replace(",", ""))
change = float(exchange.select_one("span.change").text)
updown = exchange.select("span.blind")[-1].text
print(c_name, exchange_rate, change, updown)
c_name_list.append(c_name)
exchange_rate_list.append(exchange_rate)
change_list.append(change)
updown_list.append(updown)
1
2
3
4
5
6
7
8
9
10
11
12
# 모은 리스트로 데이터프레임 만들기
import pandas as pd
exchange_datas = {
"국가": c_name_list,
"환율": exchange_rate_list,
"변동": change_list,
"등락": updown_list
}
df_exchange = pd.DataFrame(exchange_datas)
df_exchange
만든 데이터프레임 csv로 저장하기
1
df_exchange.to_csv("파일경로/이름.csv", index=False)
This post is licensed under CC BY 4.0 by the author.
