2017-04-22 64 views
0

如何从中提取“3200: - ”?从beautifulsoup中提取整数

<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

有一个for循环回似乎不正确的投 –

回答

0

这个循环是没有必要的,如果你只想要第一个项目,不要使用find_all

price = soup.find("p", {"class": "list_price font-large"}, {"itemprop": "price"}).text 

请注意,您没有收到整数。 3 200:-是一个字符串。

如果你想要一个整数,则需要分别从字符串过滤掉所有非数值,然后使用int()

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