XML은 Extensible Markup Language의 약자로, 다목적 마크업 언어이다.
필자가 처음에 봤을때 HTML과 같은 부류이지만 react에서 scss 조합으로 스타일 태그를 만들어서 이용하는 것과 매우 유사해 보였다.
인터넷 웹상에서 문서나 데이터를 교환할 때 마크업 언어를 사용한다.
나중에 공부하게 되겠지만 API에서 데이터를 request하고 response할때 XML
, JSON
형식을 이용해 교환한다.
XML의 기본적인 뼈대는 아래와 같다.
<태그이름></태그이름>
XML의 특징이 있다면, 태그이름을 작성자가 마음대로 정할 수 있다는 점이다.
<Foodlist>
<Storename>포폴로</Storename>
<Storeaddress>일산동구</Storeaddress>
</Foodlist>
파이썬의 표준 library.
기능 | 설명 |
---|---|
Element() | 태그 생성 |
SubElement() | 자식 태그 생성 |
tag | 태그 이름 |
text | 텍스트 내용 생성 |
attrib | 속성 생성 |
만든 XML을 시스템(sys.stdout)에 사용한다.
[코드]
import xml.etree.ElementTree as ET
Item = ET.Element("Item")
Name = ET.Element("Name")
Address = ET.Element("Address")
Name.text = "피자집"
Address.text = "용산구"
Item.append(Name)
Item.append(Address)
ET.SubElement(Item, 'Number').text = "010-0000-0000"
ET.dump(Item)
[결과]
<Item>
<Name>피자집</Name>
<Address>용산구</Address>
<Number>010-0000-0000</Number>
</Item>
attrib
: 속성값을 지정하는 methodtag
메소드를 이용하여 바꿀수 있다.[코드]
Item.attrib["id"] = "store01"
Name.tag = "StoreName"
ET.dump(Item)
[결과]
<Item id="store01">
<StoreName>피자집</StoreName>
<Address>용산구</Address>
<Number>010-0000-0000</Number>
</Item>
[코드]
category = ET.Element('category', indexnum="2")
category.text = '고깃집'
Item.insert(1,category)
ET.dump(Item)
[결과]
<Item id="store01">
<StoreName>피자집</StoreName>
<category indexnum="2">고깃집</category>
<Address>용산구</Address>
<Number>010-0000-0000</Number>
</Item>
Item.remove(category)
ET.ElementTree(Item).write('foodStoreList.xml')
위에선 본 ElementTree이 파싱 라이브러리의 첫번째고,
두번째는 BeautifulSoup이라는 라이브러리이다.
여기서 필요한 라이브러리는 2가지이다.
설치됬는지 확인해보는 작업도 습관을 들이는게 좋다.
pip list | grep beautifulsoup4
pip list | grep lxml
이제, 맛집 리스트 중에서 맛집 이름만 가져오고 싶다. => <StoreName>
from bs4 import BeautifulSoup
with open("/foodStoreList.xml", "r", encoding='utf8') as f:
StoreListXml = f.read()
# BeautifulSoup 객체를 생성. lxml parser을 이용하여 데이터를 분석한다.
soup = BeautifulSoup(StoreListXml,'lxml')
# find_all() 함수로 StoreName 태그들 찾기
for storename in soup.find_all('StoreName'):
print(storename.get_text())