Вы спрашиваете, что задумал автор, заметив, что он дает имена, такие как Beautiful [Stone] Soup, классам / модулям: -)
Вот еще два примера поведения BeautifulStoneSoup:
>>> soup = BeautifulSoup.BeautifulStoneSoup(
"""<alan x="y" ><anne>hello</anne>"""
)
>>> print soup.prettify()
<alan x="y">
<anne>
hello
</anne>
</alan>
>>> soup = BeautifulSoup.BeautifulStoneSoup(
"""<alan x="y" ><anne>hello</anne>""",
selfClosingTags=['alan'])
>>> print soup.prettify()
<alan x="y" />
<anne>
hello
</anne>
>>>
Мое мнение: самозакрывающийся тег недопустим, если он не определен синтаксическим анализатором. Таким образом, у автора был выбор при решении, как обрабатывать недопустимый фрагмент, такой как <alan x="y" />
... (1) предположить, что /
был ошибкой (2) трактовать alan
как самозакрывающийся тег совершенно независимо от того, как он может быть использован в другом месте во входных данных (3), сделайте 2 прохода над входом, выкручивая в первом проходе, как использовался каждый тег. Какой выбор вы предпочитаете?