我正在学习 BeautifulSoup 并且有一个网页的正文是这样的:
html:
<div>
<table>
<tr>
<td>
<div>
this is div text
<a name='abc'>this is anchor text</a>
</div>
</td>
</tr>
</table>
</div>
预期结果:
tag text parents
=== ===== =======
div "" ""
table "" div
...
div this is div text div.table.tr.td
a this is anchor text div.table.tr.td.a
我能够得到结果,但问题出在 div 中,我也得到了 anchor 文本,如下所示
div this is div text this is anchor text div.table.tr.td
a this is anchor text div.table.tr.td.a
下面是我的代码
f = open("C:/abc.html",encoding="utf8")
soup=BeautifulSoup(f,"lxml")
f.close()
for tag in soup.find_all():
allparent=""
for parenttags in tag.findParents():
allparent=parenttags.name+"."+allparent
if allparent!="":
allparent=allparent[:-1]
print(tag.name+"', '"+tag.text+"','"+allparent)
最佳答案
您正在寻找 tag.find(text=True)
如果tag
是你的 <div>foo<span>bar</span></div>
:
-
tag.find(text=True)
将输出foo
-
tag.text
将输出foo bar
.
所以,在你的情况下,只需更换
print(tag.name+"', '"+tag.text+"','"+allparent)`
通过
print(tag.name+"', '"+tag.find(text=True)+"','"+allparent)
或者更好,
print('"{}", "{}", "{}"'.format(tag.name, tag.find(text=True), allparent))
那不是更性感吗?!
关于python - 漂亮的 Soup Looping 元素,只有在当前元素及其父元素存在时才获取当前元素的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48658659/