BeautifulSoup 使用 string/text 获取第一个值

BeautifulSoup to get first value using string/text

Beautifulsoup 对于 html 在 python 中的解析很方便,但我遇到了使用 string 或 [=16= 直接获取值的干净代码的问题]

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

一起使用

你可以试试这个:

for row in table.findAll("tr"):
    td = row.findAll("td")
    t = td[0]
    print t.contents[0]

但这只有在您总是在 div 标签

之前寻找文本时才有效

您可以简单地使用 .find() function by setting the text and recursive 参数。

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