排除带有beautifulsoup的标签

时间:2018-02-20 03:18:32

标签: python beautifulsoup

我正在尝试使用beautifulsoup获取html表的内容。 当我到达单元格的级别时,我只需要获取不在strike参数

之间的值
<td>
<strike>$0.45</strike><br/>
                       $0.41
                     </td>

所以在上面的情况下我想只返回0.41美元。我正在使用data.get_text()但我不知道如何过滤掉0.45美元 关于如何做的任何想法?

4 个答案:

答案 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()

来自documentation

  

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拆分并删除两个空格。