之前查找文本时,这才有效
Beautifulsoup对于python中的html解析很方便,但我遇到了使用string
或text
直接获取值的干净代码的问题
from bs4 import BeautifulSoup
tr ="""
<table>
<tr><td>text1</td></tr>
<tr><td>text2<div>abc</div></td></tr>
</table>
"""
table = BeautifulSoup(tr,"html.parser")
for row in table.findAll("tr"):
td = row.findAll("td")
print td[0].text
print td[0].string
结果:
text1
text1
text2abc
None
如何获得的结果
text1
text2
我想跳过额外的内部标签
beautifulsoup4-4.5.0
与python 2.7
一起使用
您可以通过设置text
和recursive
参数来简单地使用.find()
函数。
for row in table.findAll("tr"):
td1 = row.td.find(text=True, recursive=False)
print str(td1)
您的输出为:
text1
text2
无论div
标签的位置如何,这都将起作用。请参阅下面的示例。
>>> tr ="""
<table>
<tr><td>text1</td></tr>
<tr><td>text2<div>abc</div></td></tr>
<tr><td><div>abc</div>text3</td></tr>
</table>
"""
>>> table = BeautifulSoup(tr,"html.parser")
>>> for row in table.findAll("tr"):
td1 = row.td.find(text=True, recursive=False)
print str(td1)
text1
text2
text3
你可以试试这个:
for row in table.findAll("tr"):
td = row.findAll("td")
t = td[0]
print t.contents[0]
但是,只有当您总是在div标记