根據BS源代碼tag.tagname
使用它實際上是引擎蓋下稱tag.find("tagname")
。這裏有一個Tag
類的__getattr__()
方法的樣子:
def __getattr__(self, tag):
if len(tag) > 3 and tag.endswith('Tag'):
# BS3: soup.aTag -> "soup.find("a")
tag_name = tag[:-3]
warnings.warn(
'.%sTag is deprecated, use .find("%s") instead.' % (
tag_name, tag_name))
return self.find(tag_name)
# We special case contents to avoid recursion.
elif not tag.startswith("__") and not tag=="contents":
return self.find(tag)
raise AttributeError(
"'%s' object has no attribute '%s'" % (self.__class__, tag))
看到,它是完全基於find()
,所以這是非常好的,你的情況使用tag.find("extract")
:
from bs4 import BeautifulSoup
data = """<test><EXTRACT>extract text</EXTRACT></test>"""
soup = BeautifulSoup(data, 'html.parser')
test = soup.find('test')
print test.find("extract").text # prints 'extract text'
此外,您還可以使用test.extractTag.text
,但它已被棄用,我不會推薦它。
希望有所幫助。