Title:
파이썬에서 XML과 HTML 다루기
|
edited by
Youngrok Pak
at
11 years, 2 months ago.
<h3>파서의 선택</h3>
<p>파이썬에서 XML 다루는 도구로 표준 <a href="http://www.w3.org/DOM/">DOM</a>에 가까운 <a href="http://docs.python.org/2/library/xml.dom.minidom.html">minidom</a>이 있지만, 현재 파이썬 커뮤니티에서는 <a href="http://docs.python.org/2/library/xml.etree.elementtree.html">ElementTree</a>를 권장한다. <a href="http://docs.python.org/2/library/xml.etree.elementtree.html">ElementTree</a>는 <a href="http://www.w3.org/DOM/">DOM</a>을 좀더 <a href="pythonic">pythonic</a>하게 쓰자는 생각에서 만든 것으로, 이름에서 알 수 있듯이 XML의 구성 요소 중에서 Element를 중심으로 트리를 구성한다. 원래 <a href="http://www.w3.org/DOM/">DOM</a>에서는 Node로 트리가 구성되며 Element는 Node의 일종으로 취급된다. 이 차이는 이를테면 다음과 같은 XML 문서가 있을 경우,</p>
<pre><h1>Hello<strong>World</strong>!!</h1></pre>
<p>ElementTree에서는 다음처럼 노드가 구성된다.</p>
<ul>
<li>Element h1</li>
<li>h1.text = Hello</li>
<li>Element strong</li>
<li>strong.text = World</li>
<li>strong.tail = !!</li>
</ul>
<p>DOM에서는 다음과 같다.</p>
<ul>
<li>Element h1</li>
<li>Text Hello</li>
<li>Element strong</li>
<li>Text World</li>
<li>Text !!</li>
</ul>
<p>누 가 봐도 DOM이 더 자연스러운데 왜 ElementTree가 더 pythonic하다는 것일까? 그 이유는 DOM의 API가 상당히 번거롭기 때문이다. XML의 구조를 온전히 반영하려다보니 간단하게 키/값만 엑세스하고 싶을 때는 몹시 귀찮다. 실제로 XML이 쓰일 때 위의 경우처럼 텍스트 사이사이의 엘리먼트가 많이 들어가고, 또 그 순서가 중요한 경우는 HTML 외에는 거의 없다. 그러다보니 API가 좀더 단순한 ElementTree가 유리한 것이다. 얼마나 유리한지 한 번 비교해보자.</p>
<p> </p>
<p>pyquery</p>
<p>lxml 성능</p>
<p>BeautifulSoup</p>
<h4>minidom</h4>
<h4>html5lib</h4>
<p> </p>