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()
在代码中,我尝试从网站获取价格数据。本网站在价格中使用空 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()