pd.read_html을 사용하여 웹에서 데이터를 임포트 하기
아래 최종 코드 올려놓겠다.
코드가 필요한 사람은 맨 아래로~
Pandas를 공부하던 중 신기한 기능이 있어서 블로그에 올려본다.
바로 웹으로부터의 데이터를 임포트 하는 방법이다.
보통 나는 웹으로 데이터를 얻을 때는 크롤링으로 얻는다고 생각했는데
다른 방법이 있다니 신기했다.
참고로 난 크롤링 할 줄 모른다..
import pandas as pd
url = "https://en.wikipedia.org/wiki/1976_Summer_Olympics_medal_table"
먼저 Pandas를 임포트 해준다.
그 다음 연습용으로 1976년 올림픽 메달 리스트를 설명하는 위키피디아 웹사이트를 url 변수에 입력한다.
https://en.wikipedia.org/wiki/1976_Summer_Olympics_medal_table
1976 Summer Olympics medal table - Wikipedia
From Wikipedia, the free encyclopedia Award Montreal's Olympic Stadium (its tower completed after the Games) was the main venue for the 1976 Summer Olympics. The 1976 Summer Olympics, officially known as the Games of the XXI Olympiad, were a summer multi-s
en.wikipedia.org
여러분도 쉽게 가볼 수 있게 링크 남겨 두겠다.
어떨 땐 링크 달아두면 이쁘게 미리 보기가 뜨던데 왜 안 뜨는지 모르겠다
( 방금 구글링 해봤는데 링크를 전부 입력하고 엔터 누르면 미리 보기가 뜬다...! )
어쨌든 들어가보면 1976년 올림픽에서 메달을 획득한 정보를 가지고 있는 표가 있다.
pd.read_html(url)
위 코드를 입력해 보자.
[ 1976 Summer Olympics medals \
0 Location
1 Highlights
2 Most gold medals
3 Most total medals
4 Medalling NOCs
5 ← 1972 · Olympics medal tables · 1980 →
6 ← 1972 ·
1976 Summer Olympics medals.1 Unnamed: 2
0 Montreal, Canada NaN
1 Highlights NaN
2 Soviet Union (49) NaN
3 Soviet Union (125) NaN
4 41 NaN
5 ← 1972 · Olympics medal tables · 1980 → NaN
6 Olympics medal tables · 1980 → ,
0 1 2
0 ← 1972 · Olympics medal tables · 1980 →,
0
0 Part of a series on
1 1976 Summer Olympics
2 Bid process (bid details) Boycott Development ...
3 vte,
Rank NOC Gold Silver Bronze Total
0 1 Soviet Union 49 41 35 125
1 2 East Germany 40 25 25 90
2 3 United States 34 35 25 94
3 4 West Germany 10 12 17 39
4 5 Japan 9 6 10 25
5 6 Poland 7 6 13 26
6 7 Bulgaria 6 9 7 22
7 8 Cuba 6 4 3 13
8 9 Romania 4 9 14 27
9 10 Hungary 4 5 13 22
10 11 Finland 4 2 0 6
11 12 Sweden 4 1 0 5
12 13 Great Britain 3 5 5 13
13 14 Italy 2 7 4 13
14 15 France 2 3 4 9
이런식으로 읽기 힘든 데이터가 나온다.
type(pd.read_html(url))
반환된 데이터의 타입을 확인해 보니 List라고 나온다.
즉, 인덱스 번호를 사용해 원하는 데이터만 가져올 수 있다.
첫 번째 인덱스의 데이터를 가져오니
이런 식의 데이터프레임이 나왔다.
이게 어떤 데이터인지 홈페이지에서 찾아봤다.
알아보니 오른쪽에 있는 표가 나왔다.
이런 식으로 홈페이지 내에 있는 모든 표를 가져오는 모양이다.
하나하나 노가다해본 결과 3번째 데이터가 내가 원하는 데이터인걸 확인했다.
데이터들이 너무 길어서 이렇게 스크린샷 찍는 중이다.
나중에 적절한 방법을 한번 찾아봐야겠다.
이런 식으로 내가 원하는 데이터가 맞는지 추가적으로 확인한 뒤에 최종적으로 변수에 저장을 하였다.
나중에 이 데이터를 통해서 종합 프로젝트를 계획 중이니 소중하게 내 폴더에 저장을 한다.
import pandas as pd
url = "https://en.wikipedia.org/wiki/1976_Summer_Olympics_medal_table"
pd.read_html(url)
type(pd.read_html(url))
pd.read_html(url)[3]
wik_1976 = pd.read_html(url)[3]
wik_1976.head()
wik_1976.tail()
wik_1976.info()
wik_1976.to_csv("wik_1976.csv", index= False)
# 데이터를 csv 파일로 저장