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)
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 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 | BeautifulSoup 사용법, find() 와 find_all() (1) | 2024.03.08 |
---|---|
[Python] 웹 크롤링 | request 와 requests, 크롤링 허용 여부 확인방법 (1) | 2024.03.07 |
[Python] JSON API 활용 예제 2 (0) | 2024.03.06 |
[Python] 공공데이터 활용한 JSON API 예제 (2) | 2024.03.05 |
[Python] JSON 파일 입출력 | 인코딩(encoding) 및 디코딩(decoding), API (2) | 2024.03.05 |