使用 Soup 获取标签名称和文本
Get tag name and text with Soup
我尝试使用 BeautifulSoup 从 header 中获取文本。 header 在他的属性中是动态的。这就是为什么我将 html-code 最小化的原因。
我想获取文本和相应的 tag-name。
我试过这个:
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element)
a = header.find_all(text = element.text)
print(a + " " + a.text.strip('\n'))
但是打印输出的只是文本,而不是带文本的标签。
我该如何解决?
谢谢转发
第一个:
<header>
<div>
<h2>
<span>
Text A here</span>
<span><span>Text B Here <span>
</span>
</h2>
<div>
<div>
<span>
<div>
</div>
</span>
</div>
<div>
Text C Here
<a>
Text C Here</a>
</div>
</div>
<div>
<a>
Text D</a>
</div>
<div>
Text E
</div>
</div>
</div>
</header>
第二个例子:
<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
</div>
</div>
</header>
第 3 个示例:
<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span>
<span>
<span><svg>
<g>
<rect></rect>
<path></path>
<path></path>
</g>
</svg>
</span>
</span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
<div>
Text D
<a>
Text E</a><span>Text F </span>
<a>
Text G</a><span> Text H </span>
<a>
Text I</a>
</div>
</div>
</div>
</header>
使用element.parent.name
获取标签名称。
根据你的例子1:
from bs4 import BeautifulSoup
html='''<header>
<div>
<h2>
<span>
Text A here</span>
<span><span>Text B Here <span>
</span>
</h2>
<div>
<div>
<span>
<div>
</div>
</span>
</div>
<div>
Text C Here
<a>
Text C Here</a>
</div>
</div>
<div>
<a>
Text D</a>
</div>
<div>
Text E
</div>
</div>
</div>
</header>'''
header=BeautifulSoup(html.strip(), 'html.parser')
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element.strip())
a = header.find(text = element.text)
print(a.parent.name + " " + a.text.strip())
输出:
Text A here
span Text A here
Text B Here
span Text B Here
Text C Here
div Text C Here
Text C Here
a Text C Here
Text D
a Text D
Text E
div Text E
示例 3:
html='''<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span>
<span>
<span><svg>
<g>
<rect></rect>
<path></path>
<path></path>
</g>
</svg>
</span>
</span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
<div>
Text D
<a>
Text E</a><span>Text F </span>
<a>
Text G</a><span> Text H </span>
<a>
Text I</a>
</div>
</div>
</div>
</header>'''
header=BeautifulSoup(html.strip(), 'html.parser')
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element.strip())
a = header.find(text = element.text)
print(a.parent.name + " " + a.text.strip())
输出:
Text A
span Text A
Text B
span Text B
Text C
div Text C
Text D
div Text D
Text E
a Text E
Text F
span Text F
Text G
a Text G
Text H
span Text H
Text I
a Text I
我尝试使用 BeautifulSoup 从 header 中获取文本。 header 在他的属性中是动态的。这就是为什么我将 html-code 最小化的原因。 我想获取文本和相应的 tag-name。 我试过这个:
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element)
a = header.find_all(text = element.text)
print(a + " " + a.text.strip('\n'))
但是打印输出的只是文本,而不是带文本的标签。 我该如何解决?
谢谢转发
第一个:
<header>
<div>
<h2>
<span>
Text A here</span>
<span><span>Text B Here <span>
</span>
</h2>
<div>
<div>
<span>
<div>
</div>
</span>
</div>
<div>
Text C Here
<a>
Text C Here</a>
</div>
</div>
<div>
<a>
Text D</a>
</div>
<div>
Text E
</div>
</div>
</div>
</header>
第二个例子:
<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
</div>
</div>
</header>
第 3 个示例:
<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span>
<span>
<span><svg>
<g>
<rect></rect>
<path></path>
<path></path>
</g>
</svg>
</span>
</span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
<div>
Text D
<a>
Text E</a><span>Text F </span>
<a>
Text G</a><span> Text H </span>
<a>
Text I</a>
</div>
</div>
</div>
</header>
使用element.parent.name
获取标签名称。
根据你的例子1:
from bs4 import BeautifulSoup
html='''<header>
<div>
<h2>
<span>
Text A here</span>
<span><span>Text B Here <span>
</span>
</h2>
<div>
<div>
<span>
<div>
</div>
</span>
</div>
<div>
Text C Here
<a>
Text C Here</a>
</div>
</div>
<div>
<a>
Text D</a>
</div>
<div>
Text E
</div>
</div>
</div>
</header>'''
header=BeautifulSoup(html.strip(), 'html.parser')
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element.strip())
a = header.find(text = element.text)
print(a.parent.name + " " + a.text.strip())
输出:
Text A here
span Text A here
Text B Here
span Text B Here
Text C Here
div Text C Here
Text C Here
a Text C Here
Text D
a Text D
Text E
div Text E
示例 3:
html='''<header>
<div>
<div>
<h2>
<span>
Text A
</span>
<span>
<span>
<span><svg>
<g>
<rect></rect>
<path></path>
<path></path>
</g>
</svg>
</span>
</span><span>Text B</span>
</span>
</h2>
<div>
Text C
</div>
<div>
Text D
<a>
Text E</a><span>Text F </span>
<a>
Text G</a><span> Text H </span>
<a>
Text I</a>
</div>
</div>
</div>
</header>'''
header=BeautifulSoup(html.strip(), 'html.parser')
for element in header.find_all(string = True):
if len(element.text.strip('\n')) > 0:
print(element.strip())
a = header.find(text = element.text)
print(a.parent.name + " " + a.text.strip())
输出:
Text A
span Text A
Text B
span Text B
Text C
div Text C
Text D
div Text D
Text E
a Text E
Text F
span Text F
Text G
a Text G
Text H
span Text H
Text I
a Text I