45


 

1.  XML 이란?

🍋  eXtensible Markup Language 은 데이터 저장 및 전달을 위해 만든 다목적 마크업 언어 Markup Language
      📌  마크업 언어는 일반적인 텍스트와 구분되는 태그 Tag를 이용해 문서나 데이터를 구조화 하는 언어

      📌  JSON과 마찬가지로 데이터 전달을 목적으로 만든 구조화된 텍스트 형식
      📌  대표적인 마크업 언어로는 HTML HyperText Markup Language

🍋  HTML의 경우는 태그가 미리 정해져 있지만 XML은 자신이 태그를 정의해서 사용할 수 있음
       ➡️ 단 XML 문서의 규칙을 따라야 함

🍋  태그는 '<문자열>'로 시작해서 '</문자열>'로 끝나야 한다
      📌  시작과 끝 태그의 문자열은 같아야 하며 대소문자를 구분

      📌  중첩해 여러 개를 이용할 수 있는데 이때 태그는 반드시 올바른 순서대로 이용해야 함

             ex.  '<abc><def> ~ </def></abc>' 와 같이 나중에 나온 시작 태그에 대응하는 끝 태그가 먼저 나와야

     📌  XML 문서에서는 시작 태그에서 끝 태그까지로 이루어진 것을 요소 element라고 함

🍋  XML 문서에는 반드시 최상위 root 요소가 있어야 함 

      📌  최상위 요소는 시작과 끝 태그로 다른 모든 요소를 감싸야 함

🍋  주석은 '<!--'와  '-->'로 문자열을 감싸서 표시. 즉 '<!-- 이것은 주석입니다 -->'와 같이 사용

🍋  xml을 지정하는 모듈은 내장 모듈로 xml이 있고, 외부 모듈의 경우 xmltodict 사용
     📌  xml 데이터를 파이썬의 딕셔너리 타입으로 바로 변환
 

🍋  xmltodict 라이브러리에서 XML 형식의 데이터를 파이썬의 딕셔너리 타입으로 변환하는 함수
     📌  xmltodict.parse(xml_input, [ xml_attribs=True 혹은 False ])
     📌  xml_input은 XML 타입의 데이터
     📌  xml_attribs은 기본 값은 True
            ➡️  False 이면 XML 형식의 데이터를 딕셔너리 타입으로 변환할 때 속성을 무시

 

🍋   pprint.pprint() 함수를 사용하면 내용이 들여쓰기 된 상태로 보기좋게 출력 가능  

import xmltodict
import pprint

with open('../input_2/data.xml', 'r', encoding='utf-8') as xml_file:
    dict_data = xmltodict.parse(xml_file.read(), xml_attribs=True)  # xml 데이터를 딕셔너리로 변경
    #print(dict_data)
    #print(dict_data['response']['body']['items'])
    datas = dict_data['response']['body']['items']
    pprint.pprint(datas)

 

data.xml 내용

 

실행 결과

 

 


 

2. 오페라 공연 제목과 링크주소 추출 및 저장

 

import csv
from datetime import datetime
import xmltodict
import pprint
import requests

# 1. 데이터 추출
url = 'https://www.daeguoperahouse.org/rss.php'
response = requests.get(url)
dict_data = xmltodict.parse(response.text)
pprint.pprint(dict_data)

실행 결과


 

# 2. 필요한 데이터 추출하기

data_list = dict_data['rss']['channel']['item']

new_datas:list[dict] = list()  # 필요 내용만 담을 리스트 필요

for k in data_list:
    new_data = dict()
    new_data['title'] = k['title']
    new_data['link'] = k['link']
    new_datas.append(new_data)
pprint.pprint(new_datas)

 

실행 결과


# 3. 현재 날짜로 파일명 지정해서 저장하기

today = datetime.now().strftime('%y%m%d')  # 현재 날짜 구하기
print(today)

with open(f'../output_02/daeguoperahouse_{today}.csv', 'wt', newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=['title', 'link'])
    writer.writeheader()
    for k in new_datas:
        writer.writerow(k)

print('파일 생성을 성공했습니다.')

파일 생성 완료

 

 

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts