2017-04-22 88 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