我正在尝试使用beautifulsoup获取html表的内容。 当我到达单元格的级别时,我只需要获取不在strike参数
之间的值<td>
<strike>$0.45</strike><br/>
$0.41
</td>
所以在上面的情况下我想只返回0.41美元。我正在使用data.get_text()但我不知道如何过滤掉0.45美元 关于如何做的任何想法?
答案 0 :(得分:1)
您可以查看TD代码的所有NavigableString
子代,并忽略所有其他元素:
textData = ''.join(x for x in soup.find('td').children \
if isinstance(x, bs4.element.NavigableString)).strip()
#'$0.41'
答案 1 :(得分:1)
您可以通过多种方式执行相同的操作。这是一种这样的方式:
from bs4 import BeautifulSoup
content="""
<td>
<strike>$0.45</strike><br/>
$0.41
</td>
"""
soup = BeautifulSoup(content,"lxml")
item = soup.find("td").contents[-1].strip()
print(item)
输出:
$0.41
答案 2 :(得分:1)
以上所有解决方案都有效。添加一种方法: extract()
PageElement.extract()
从树中删除标记或字符串。它返回提取的标记或字符串。
您可以像这样使用它(再添加一个<td>
标记来展示如何在循环中使用它):
html = '''
<td>
<strike>
$0.45
</strike>
<br/>
$0.41
</td>
<td>
<strike>
$0.12
</strike>
<br/>
$0.14
</td>
'''
soup = BeautifulSoup(html, 'html.parser')
for td in soup.find_all('td'):
td.strike.extract()
print(td.text.strip())
输出:
$0.41
$0.14
答案 3 :(得分:0)
您可以通过以下方式执行此操作
from bs4 import BeautifulSoup
h = '''
<td>
<strike>$0.45</strike><br/>
$0.41
</td>
'''
soup = BeautifulSoup(h, 'lxml')
a = soup.find('td').get_text()
print(a.split('\n')[2].strip())
用Enter拆分并删除两个空格。