BeautifulSoup не является библиотекой DOM как таковой (она не реализует API DOM). Чтобы сделать вещи более сложными, вы используете пространства имен в этом фрагменте XML. Чтобы проанализировать этот конкретный фрагмент XML, вы должны использовать BeautifulSoup следующим образом:
from BeautifulSoup import BeautifulSoup
xml = """<xml>
<web:Web>
<web:Total>4000</web:Total>
<web:Offset>0</web:Offset>
</web:Web>
</xml>"""
doc = BeautifulSoup( xml )
print doc.find( 'web:total' ).string
print doc.find( 'web:offset' ).string
Если вы не используете пространства имен, код может выглядеть следующим образом:
from BeautifulSoup import BeautifulSoup
xml = """<xml>
<Web>
<Total>4000</Total>
<Offset>0</Offset>
</Web>
</xml>"""
doc = BeautifulSoup( xml )
print doc.xml.web.total.string
print doc.xml.web.offset.string
Ключевым моментом здесь является то, что BeautifulSoup ничего не знает (или не заботится) о пространствах имен. Таким образом, web:Web
обрабатывается как тег web:web
вместо тега Web
, принадлежащего пространству имен web
. В то время как BeautifulSoup добавляет web:web
в словарь элементов xml, синтаксис python не распознает web:web
как один идентификатор.
Подробнее об этом можно прочитать, прочитав документацию .