从spansoup获取跨度内的数字

时间:2018-03-20 00:00:45

标签: python html beautifulsoup

所以我有来自html的这篇文章

<label for="productX" id="_productX_label">
   <span class="t">XS</span>
   <span class="s">10 x 10 cm</span>
   <span class="p"> <span>5 300</span> Ft </span>
</label>

我希望得到那个&#39; 5 300&#39;出来的。

我的代码:

print(item.find('label',{'for':'productX'}).find('span', attrs={'class': 'p'}).find('span'))

但它只打印出来:

<span></span>

我希望有人可以提供帮助

编辑:已经尝试将.text写到最后但它没有给出任何内容。 &#39;

3 个答案:

答案 0 :(得分:1)

你几乎得到它,你只需要将.text添加到最后一个find函数。

from bs4 import BeautifulSoup

html = """<label for="productX" id="_productX_label">
<span class="t">XS</span>
<span class="s">10 x 10 cm</span>
<span class="p"> <span>5 300</span> Ft </span>
</label>"""

item = BeautifulSoup(html, "lxml")

print(item.find('label',{'for':'productX'}).find('span', attrs={'class': 'p'}).find('span').text)

输出:

5 300

答案 1 :(得分:0)

你可以试试这个:

from bs4 import BeautifulSoup as soup
import re
s = """
<label for="productX" id="_productX_label">
  <span class="t">XS</span>
  <span class="s">10 x 10 cm</span>
  <span class="p"> <span>5 300</span> Ft </span>
</label>
"""
final_result = re.sub('^\s+|[a-zA-Z\s]+$', '', soup(s, 'lxml').find('span', {'class':'p'}).text)

输出:

u'5 300'

答案 2 :(得分:0)

这是一个选择,它不会给你很多选项但是很可读

import bs4

s = """<label for="productX" id="_productX_label">
   <span class="t">XS</span>
   <span class="s">10 x 10 cm</span>
   <span class="p"> <span>5 300</span> Ft </span>
</label>"""

soup = bs4.BeautifulSoup(s, 'xml')

soup.select_one("#_productX_label > span > span").text

输出:'5 300'

对于您无法使用text属性的其他问题,可能数据是由js函数填写的,还是存储在属性中?