반응형

/*********************************************************************************************************
-- Title : [Py2.7] API호출 및 파일 오픈을 통한 XML 처리하기
-- Reference : Python for Data Analysis
-- Key word : pandas dataframe xml api urllib2 beautifulsoup open 파일 오픈

*********************************************************************************************************/


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# -*- coding: utf-8 -*-
 
import os, sys
import pandas as pd
import urllib2
from bs4 import BeautifulSoup
 
 
# ********************************************
# -- XML 읽기
#    urllib2 패키지 필요
#    파서는 BeautifulSoup 패키지 사용
# ********************************************
print("-" * 100 + "{[15]}"# ----- #
 
movieURL = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.xml?key=430156241533f1d058c603178cc3ca0e&openDt=20150101"
moviePage = urllib2.urlopen(movieURL)
movieSoup = BeautifulSoup(moviePage, "html.parser")
print movieSoup
 
print(movieSoup.prettify())   # 이쁘게 들여쓰기
 
 
# ********************************************
# -- XML 원소 찾기(find_all)
# ********************************************
print("-" * 100 + "{[16]}"# ----- #
 
print movieSoup.find_all("moviecd")            # xml은 소문자로 모두 처리됨 주의!!!
print movieSoup.find_all("moviecd")[0].text    # 태크 제거
print len(movieSoup.find_all("moviecd"))
 
print movieSoup.find_all("moviecd")[0].text
print movieSoup.find_all("movienm")[0].text
print movieSoup.find_all("movienmen")[0].text
print movieSoup.find_all("opendt")[0].text
print movieSoup.find_all("typenm")[0].text
 
print("-" * 100 + "{[16.2]}"# ----- #
 
 
# ********************************************
# -- XML 저장할 DF 생성
# ********************************************
print("-" * 100 + "{[17]}"# ----- #
df = pd.DataFrame(columns=("moviecd""movienm""movienmen""opendt""typenm"))
print df
 
moviecnt =  len(movieSoup.find_all("movie"))
print moviecnt
 
for i in range(moviecnt):
    df.loc[i] = [movieSoup.find_all("moviecd")[i].text,
                 movieSoup.find_all("movienm")[i].text,
                 movieSoup.find_all("movienmen")[i].text,
                 movieSoup.find_all("opendt")[i].text,
                 movieSoup.find_all("typenm")[i].text
                ]
print df
 
print("-" * 100 + "{[17.2]}"# ----- #
 
# -- 기존 컬럼을 인덱스 컬럼으로 변경
df = df.set_index("movieCd")
print df
 
print("-" * 100 + "{[17.5]}"# ----- #
 
 
# ********************************************
# -- 엑셀 출력
# ********************************************
print("-" * 100 + "{[18]}"# ----- #
 
excelOutPath = "C:\\samples\\movie_xml_new.xlsx"
writer = pd.ExcelWriter(excelOutPath, engine="xlsxwriter")
 
df.to_excel(writer, sheet_name="Sheet1", index=True)
 
writer.save()
 
 
# ********************************************
# -- XML 파일 호출을 통한 XML 처리
# ********************************************
print("-" * 100 + "{[19]}"# ----- #
 
# -- 파일 오픈
xmlFile = open("C:\\samples\\movie.xml""r")
openFile = xmlFile.read()
 
# -- 파일의 string 데이터를 parsing하기 위해 변환
fileSoup = BeautifulSoup(openFile, "html.parser")
print fileSoup.prettify()
 
# -- 파일 닫기
xmlFile.close()
 
print("-" * 100 + "{[19.2]}"# ----- #
 
# -- XML 원소 추출
# -- 파일 자체가 UTF-8 이어야 한글이 깨지지 않음(Ultraedit에서 UTF-8로 변환).
print fileSoup.find_all("moviecd")[0].text
print fileSoup.find_all("movienm")[0].text
print fileSoup.find_all("movienmen")[0].text
print fileSoup.find_all("opendt")[0].text
print fileSoup.find_all("typenm")[0].text
 
print("-" * 100 + "{[19.4]}"# ----- #
 
# -- XML 저장할 DF 생성
df = pd.DataFrame(columns=("moviecd""movienm""movienmen""opendt""typenm"))
print df
 
print("-" * 100 + "{[19.6]}"# ----- #
 
# -- 데이터 입력
tagcnt =  len(fileSoup.find_all("movie"))
print tagcnt
 
for i in range(tagcnt):
    df.loc[i] = [fileSoup.find_all("moviecd")[i].text,
                 fileSoup.find_all("movienm")[i].text,
                 fileSoup.find_all("movienmen")[i].text,
                 fileSoup.find_all("opendt")[i].text,
                 fileSoup.find_all("typenm")[i].text,
                ]
 
print df
 
print("-" * 100 + "{[19.8]}"# ----- #
 
 
 

cs

-- 샘플 파일


반응형

+ Recent posts