从beautifulsoup中提取一个整数

时间:2017-04-22 16:16:00

标签: python beautifulsoup

如何从中提取“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,但我怎样才能更有效地做到这一点?

3 个答案:

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