beauthulsoup只在td标记中获取“general”文本,而在嵌套标记中什么也得不到

2024-10-01 13:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的html如下所示:

<td>Potato1 <span somestuff...>Potato2</span></td>
...
<td>Potato9 <span somestuff...>Potato10</span></td>

我让Beautulsoup来做这个:

^{pr2}$

我得到了

Potato1 Potato2
....
Potato9 Potato10

是否可以只获取标记内的文本而不是span标记中嵌套的任何文本?在


Tags: 标记文本htmltdspanpr2somestuffbeautulsoup
2条回答

另一个方法,与tag.contents[0]不同,它保证文本是 NavigableString而不是子Tag内的文本是:

[child for tag in soup.find_all("td") 
 for child in tag if isinstance(child, bs.NavigableString)]

以下是一个突出差异的示例:

^{pr2}$

或者,对于lxml,可以使用XPath td/text()

import lxml.html as LH

content = '''
<td>Potato1 <span>Potato2</span></td>
<td><span>FOO</span></td>
<td><span>Potato10</span>Potato9</td>
'''
root = LH.fromstring(content)

print(root.xpath('td/text()'))

收益率

['Potato1 ', 'Potato9']

您可以使用^{}作为

>>> for tag in soup.find_all("td"):
...     print tag.contents[0]
...
Potato1
Potato9

它的作用是什么?

标记子级可以使用.contents作为列表使用。在

^{pr2}$

因为我们只对第一个元素感兴趣,所以我们

print tag.contents[0]

相关问题 更多 >