根据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
,但它已被弃用,我不会推荐它。
希望有所帮助。