BeautifulSoupでCDataをぬきぬき

BeautifulSoupでCDataを取り扱うのにちょっと苦労したんでメモ。

text = """<test><![CDATA[some data here]]></test>"""
soup = BeautifulSoup(text)
print soup.text.string
>>>> <![CDATA[some data here]]>

えー、"some data here"が出力されるんじゃないの?

ソースを見ると

class CData(NavigableString):
    def __str__(self, encoding=DEFAULT_OUTPUT_ENCODING):
        return "<![CDATA[%s]]>" % NavigableString.__str__(self, encoding)

こんなことになってた。ふむふむ。


こうすればok。

print soup.test.string.encode('utf-8')
>>>> some data here