How can I remove empty space in float from a number I get from web scraping? Error: could not convert string to float: '1\xa0364'

How can I remove empty space in float from a number I get from web scraping? Error: could not convert string to float: '1\xa0364'

在代码中,我尝试从网站获取价格数据。本网站在价格中使用空 space 并且浮点数 class 引发 flag:could not convert string to float: '1\xa0364' 此代码应从网站中提取价格,但是网站信息中价格中的空 space 会导致错误。我不确定代码是否有效,但不会进一步研究其他功能。

这个其实是价格:1364,但是给出的是:1\xa0364'

请看代码:


URL = 'https://www.reebok.se/zig-kinetica-ii-edge-gore-tex/H05172.html'
headers={"user-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'}
def check_price():
    page = requests.get(URL , headers=headers)
    soup = BeautifulSoup(page.content, 'html.parser')
    
    title = soup.find( class_  = 'gl-heading gl-heading--regular gl-heading--italic name___1EbZs').get_text()
    print(title)
    price=soup.find( class_ ='gl-price-item gl-price-item--sale notranslate').get_text()
    converted_price= float(price[0:5])
        

你可以对这种事情使用替换, 你的代码应该是这样的:

price_str = "1\xa0364"
if len(price_str) >= 4 : # removing white space just for values with 4 or more chars
    price = float(price_str.replace(u'\xa0', u''))
else:
    price = float(price_str)

如果你只是想删除空格,你可以用

之类的东西来做到这一点

split + join

>>> ''.join("1\xa0364".split())
'1364'

regex replace

>>> import re
>>> re.sub("\s", "", "1\xa0364")
'1364'

您可能还会发现这个答案很有帮助,它基本上从字符串中提取数字和小数点并忽略其他所有内容: Python Remove Comma In Dollar Amount 不过有时它可能会给出一些误报,例如

>>> other_option("Error: 404 file not found.  Try again in 10 seconds")
404.10

您还可以使用正则表达式从已格式化为易于使用“.”进行浮点转换的脚本标记中提取

import requests, re

URL = 'https://www.reebok.se/zig-kinetica-ii-edge-gore-tex/H05172.html'
HEADERS ={"user-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0'}

def check_price():
    page = requests.get(URL , headers=HEADERS)  
    name, price = [re.search(f'(?<!Brand",)"{i}":"?(.*?)[",]', page.text).group(1) for i in ['name', 'price']]
    print(f'{name}: {float(price)}')
    
check_price()