2016-06-23 2 views
1

文字列から浮動小数点数を抽出するときに問題が発生しています。Pythonでユニコードとバックスラッシュを含む分割文字列

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

私が取得したい::文字列は、ウェブスクレイピングの出力である

output: 3450.00

が、私はそれを行うための方法を見つけることができませんでした。私は、機能を置き換える/スプリットでそれを抽出することを試みた:

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'] 

抽出し、同様に動作しないのですか?

+0

は、あなたが何をしようとしたのですか? –

+0

どういう意味ですか?私が使った機能は? –

+0

はい.. –

答えて

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

>> 450.00 

ほら

+0

の周りで\ xaを使って抽出します。しかし、あなたは 'pw'が何をすべきかを知りません。それは不変ではないかもしれません。 – th3an0maly

+0

よかったですが、それはしません。私は3450.00を抽出したい –

+1

@Jb_Eyd '\ xa3450.00'は文字どおり' PS450.00'です – SvbZ3r0

0

問題は\xa3はユニコードのポンド記号です。 split('\xa')を実行すると、Unicode文字を半分に分割しようとしています。 \xa3450.00£450.00に変換されるため、実際に出力するのは450.00です。

str.split('\xa3') 

は、Python 3で動作するはずです。


注: inputキーワードです。再割り当てを明示しない限り、変数として使用しないことをお勧めします。

+0

これはアスキー文字ではないので動作しません。UnicodeDecodeError: 'ascii'コーデックは位置0のバイト0xa3をデコードできません:順序はありません。範囲内(128) ' – th3an0maly

+0

@ th3an0malyコンソールがユニコード文字をサポートしていないために発生します。それはまったく別の問題です。 IDLEで動作するはずです。 – SvbZ3r0

+0

偶然、私はIDLEを使用しています:) – th3an0maly

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' 
+0

ほぼ!実際にあなたは正しい結果を得られません、あなたは3450.00を抽出しませんが、450.00 –

+0

のみそれは本当の答えは£450.00です。あなたはなぜ345.00を望んでいるのですか? –

-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

そして、ここからあなたが簡単に値を抽出することができます。

+0

答えをありがとう。いいえ、同じ問題がまだ残っているために機能します。すなわち、 –

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) 

output: [u'450.00']

+0

これは@Rahul K Pの答えの複製です。 – th3an0maly

関連する問題