Python:将一个unicode变量转化为一个字符串变量
Python: Transform a unicode variable into a string variable
我使用网络爬虫获取了一些数据。我将数据存储在变量 price
中。 price
的类型是:
<class 'bs4.element.NavigableString'>
price
的每个元素的类型是:
<type 'unicode'>
基本上 price
包含一些白色 space 和换行符,后跟:0
。我想消除所有多余的符号并只恢复数字520
。我已经做了一个天真的解决方案:
def reducePrice(price):
key=0
string=""
for i in price:
if (key==1):
string=string+i
if (i== '$'):
key=1
key=0
return string
但我想实现一个更优雅的解决方案,将price
的类型转换为str
,然后使用str
方法对其进行操作。我已经在网络和论坛中的其他帖子中搜索了很多。我能得到的最好的是使用:
p = "".join(price)
我可以生成一个大的 unicode 变量。如果你能给我一个提示,我将不胜感激(我在 Ubuntu 中使用 python 2.7)。
编辑 我添加我的蜘蛛以备不时之需:
def spider(max_pages):
page = 1
while page <= max_pages:
url = "http://www.lider.cl/walmart/catalog/product/productDetails.jsp?cId=CF_Nivel2_000021&productId=PROD_5913&skuId=5913&pId=CF_Nivel1_000004&navAction=jump&navCount=12"
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
title = ""
price = ""
for link in soup.findAll('span', {'itemprop': 'name'}):
title = link.string
for link in soup.find('em', {'class': 'oferLowPrice fixPriceOferUp '}):
price = link.string
print(title + '='+ str(reducePrice(price)))
page += 1
spider(1)
编辑 2 感谢 Martin 和 mASOUD,我可以使用 str
方法生成解决方案:
def reducePrice(price):
return int((("".join(("".join(price)).split())).replace("$","")).encode())
这个方法return一个int
。这不是我最初的问题,但这是我项目的下一步。我添加它是因为我们不能将 unicode 转换为 int
但我们可以先使用 encode() 生成 str
。
使用 RegEx 从您的 Unicode 字符串中提取价格:
import re
def reducePrice(price):
match = re.search(r'\d+', u' 0 ')
price = match.group() # returns u"500"
price = str(price) # convert "500" in unicode to single-byte characters.
return price
即使这个函数按照您的要求将 Unicode 转换为 "regular" 字符串,您有什么理由想要这个吗? Unicode 字符串可以像普通字符串一样使用。即 u"500"
与 "500"
几乎相同
我使用网络爬虫获取了一些数据。我将数据存储在变量 price
中。 price
的类型是:
<class 'bs4.element.NavigableString'>
price
的每个元素的类型是:
<type 'unicode'>
基本上 price
包含一些白色 space 和换行符,后跟:0
。我想消除所有多余的符号并只恢复数字520
。我已经做了一个天真的解决方案:
def reducePrice(price):
key=0
string=""
for i in price:
if (key==1):
string=string+i
if (i== '$'):
key=1
key=0
return string
但我想实现一个更优雅的解决方案,将price
的类型转换为str
,然后使用str
方法对其进行操作。我已经在网络和论坛中的其他帖子中搜索了很多。我能得到的最好的是使用:
p = "".join(price)
我可以生成一个大的 unicode 变量。如果你能给我一个提示,我将不胜感激(我在 Ubuntu 中使用 python 2.7)。
编辑 我添加我的蜘蛛以备不时之需:
def spider(max_pages):
page = 1
while page <= max_pages:
url = "http://www.lider.cl/walmart/catalog/product/productDetails.jsp?cId=CF_Nivel2_000021&productId=PROD_5913&skuId=5913&pId=CF_Nivel1_000004&navAction=jump&navCount=12"
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
title = ""
price = ""
for link in soup.findAll('span', {'itemprop': 'name'}):
title = link.string
for link in soup.find('em', {'class': 'oferLowPrice fixPriceOferUp '}):
price = link.string
print(title + '='+ str(reducePrice(price)))
page += 1
spider(1)
编辑 2 感谢 Martin 和 mASOUD,我可以使用 str
方法生成解决方案:
def reducePrice(price):
return int((("".join(("".join(price)).split())).replace("$","")).encode())
这个方法return一个int
。这不是我最初的问题,但这是我项目的下一步。我添加它是因为我们不能将 unicode 转换为 int
但我们可以先使用 encode() 生成 str
。
使用 RegEx 从您的 Unicode 字符串中提取价格:
import re
def reducePrice(price):
match = re.search(r'\d+', u' 0 ')
price = match.group() # returns u"500"
price = str(price) # convert "500" in unicode to single-byte characters.
return price
即使这个函数按照您的要求将 Unicode 转换为 "regular" 字符串,您有什么理由想要这个吗? Unicode 字符串可以像普通字符串一样使用。即 u"500"
与 "500"