如何从中提取“3200: - ”?
<p class="list_price font-large" itemprop="price">3 200:-</p>
price = soup.find_all("p", {"class": "list_price font-large"}, {"itemprop": "price"})[0]
def get_price():
for integer in price:
return(integer)
print(get_price())
它为我打印出3200,但我怎样才能更有效地做到这一点?
答案 0 :(得分:1)
该循环不是必需的,如果您只想要第一个项目,请不要使用find_all
price = soup.find("p", {"class": "list_price font-large"}, {"itemprop": "price"}).text
注意,您没有获得整数。 3 200:-
是一个字符串。
如果你想要一个整数,你需要单独过滤掉字符串中的所有非数值,然后使用int()
答案 1 :(得分:0)
3 200:-
是节点的文本。您可以使用.text
属性来访问它:
s = '<p class="list_price font-large" itemprop="price">3 200:-</p>'
from bs4 import BeautifulSoup
soup = BeautifulSoup(s, "html.parser")
price = soup.find_all("p", {"class": "list_price font-large"}, {"itemprop": "price"})
for node in price:
print(node.text)
# 3 200:-
然后您可以按照您想要的方式删除空格:
for node in price:
print(node.text.replace(' ', ''))
# 3200:-
或者,如果您只想要该号码,可以使用re
模块删除该字符串中的所有非数字:
import re
for node in price:
print(re.sub(r'\D', '', node.text))
# 3200
答案 2 :(得分:0)
price= soup.find("p", {"class": "list_price font-large"}, {"itemprop": "price"}).text
# price => '3 200:-'
price = price.replace(' ','')
# price => '3200:-'
import re
price = int(re.search('[0-9]+',price).group(0))
# price =>3200