BeautifulSoup使用字符串/文本获取第一个值



Beautifulsoup对于python中的html解析很方便,但我遇到了使用stringtext 直接获取值的干净代码的问题

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.0python 2.7 一起使用

您可以通过设置textrecursive参数来简单地使用.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标记

之前查找文本时,这才有效

最新更新