使用Python的unicode和反斜杠拆分字符串

时间:2016-06-23 09:49:13

标签: python unicode split web-scraping

我在从字符串中提取浮点数时遇到问题。字符串是webscraping的输出:

input = u'<strong class="ad-price txt-xlarge txt-emphasis " itemprop="price">\r\n\xa3450.00pw</strong>'

我想得到:

output: 3450.00

但我找不到办法。我试图用split / replace函数提取它:

word.split("\xa")
word.replace('<strong class="ad-price txt-xlarge txt-emphasis " itemprop="price">\r\n\xa','')

我尝试使用re库。它不起作用,它只提取450.00

import re
num = re.compile(r'\d+.\d+')
num.findall(word)
[u'450.00']

因此,我最后仍然遇到与\相同的问题 你有好主意吗 ?

5 个答案:

答案 0 :(得分:1)

\xa3是英镑符号。

import unidecode 
print unidecode.unidecode(input)

<strong class="ad-price txt-xlarge txt-emphasis " itemprop="price">
PS450.00pw</strong>

要从中获取数字,最好使用正则表达式:

import re
num = re.compile(r'\d+.\d+')
num.findall(input)[0]

结果

'450.00'

答案 1 :(得分:0)

问题是\xa3是unicode中的英镑符号。当你split('\xa')时,你正试图将unicode角色分成两半。您实际需要的输出是450.00,因为\xa3450.00会转换为£450.00

str.split('\xa3')

应该在 Python 3 中工作。

注意: input是关键字。除非您明确表示要重新分配,否则我建议不要将其用作变量。

答案 2 :(得分:0)

还有另一种可能的解决方案:

import re

x = u'<strong class="ad-price txt-xlarge txt-emphasis " itemprop="price">\r\n\xa3450.00pw</strong>'
print re.findall(r'\d+.\d*', x)
  

输出:[u&#39; 450.00&#39;]

答案 3 :(得分:-1)

此代码可以帮助您:

import requests 
from bs4 import BeautifulSoup

input = u'<strong class="ad-price txt-xlarge txt-emphasis " itemprop="price">\r\n\xa3450.00pw</strong>'
soup = BeautifulSoup(input)
# Find all script tags
for n in soup.find_all('strong'):
    # Check if the src attribute exists
    if 'src' in n.attrs:
        value = n['src']
        print value

我承认我没有运行它,但输出假设为:

  

\ r \ n \ xa3450.00pw

从这里你可以轻松地提取价值。

答案 4 :(得分:-1)

input.encode('utf-8').split('\xa3')[1].split('pw')[0]

>> 450.00