所以我有来自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;
答案 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函数填写的,还是存储在属性中?