2009-04-15 11 views
15

最後の出力がテキストファイルになるように、すべてのHTMLを文字列から消去しようとしています。私は様々な「コンバーター」に関するいくつかの調査をしており、エンティティとシンボルのための独自の辞書を作成し、文字列の置換えを実行することに向かっています。私はプロセスを自動化したいので、これを検討しています。基礎となるhtmlの品質にはさまざまなバラツキがあります。私の解決策のスピードと、例えばpyparsingの代替案の1つを比較するために、文字列メソッドreplaceを使って\ xa0の置換をテストすることにしました。Pythonでユニコードを使用する方法

s=unicodestring.replace(r'\xa0','') 
:私は

s=unicodestring.replace('\xa0','') 

はとにかく-IはIをrとそれを前置きする必要があると判断されたコードの実際の行は、私はこのコード行を実行した

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128) 

を取得します

これはエラーなく実行されますが、スライスを見ると\ xaOはまだそこにあることがわかります

+3

「\ xa0」にrを付ける理由は何ですか?それは生の文字列になります。つまり、文字通りバックスラッシュ、x、a、0を含みます。rがなければ、それは16進コードa0の1文字を含んでいます。 –

+0

なぜ私はエラーが発生したのか推測しようとしていたので、\を強制的に読み込むようにするには、文字列リテラルにする必要があり、\ xa0は自分のソースに実際に存在するものです。 16進コードは何ですか? – PyNEwbie

答えて

25

はあなたがやるべきことかもしれ

s=unicodestring.replace(u'\xa0',u'') 
+0

これは私がこれをどの例でも見たことがないので、あなたはこれをどうやって知っていましたか?ありがとう – PyNEwbie

+1

私は単一引用符で文字列がascii ..だから '\ xa0'例外を発生させます.. – z33m

3

codecs標準ライブラリ、具体的にはエンコードおよびデコードメソッドは、コーデックベースクラスで提供されています。

それをまとめた良い記事hereもあります。

+0

ありがとうございます。あなたは正しいです。 – PyNEwbie

1

HTMLのクリーニングに関する注意点。

< 
body 
> 

は、HTMLを書き込むための有効な方法です。ちょうどfyi。

0

あなたはこのようにUnicodeに変換することができます:

print u'Hello, \xa0World' # print Hello, World 
6
s=unicodestring.replace('\xa0','') 

..isがあるUnicode文字\xa0を作成しようASCII sctring(バージョン3.xまでのPythonのデフォルトの文字列型)では無効です

T彼は理由をr'\xa0'はしなかった生の文字列で、エスケープシーケンスは効果がないためです。むしろUnicode文字に\xa0をエンコードしようとするよりも、それはように「バックスラッシュ」、「リテラルX」として文字列を見ました。..

以下同じです。

>>> r'\xa0' 
'\\xa0' 
>>> '\\xa0' 
'\\xa0' 

です何か、デフォルトの文字列型がUnicodeであるので、あなたはちょうど私が最終的な出力がテキストであるので、文字列からHTMLのすべてをきれいにしようとしています。..

>>> '\xa0' 
'\xa0' 

を行うことができますよう、PythonのV3で解決ファイル

私は、これにはBeautifulSoupを強くお勧めします。HTMLの清掃用具を書くことは、これに代えて

>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>") 
>>> print soup.prettify() 
<html> 
<body> 
    <h1> 
    Hi 
    </h1> 
</body> 
</html> 
+0

私はこの答えを感謝します。私はテーブルからデータを抽出するためにBSを使いました。それは非常に便利です。しかし、BSを使ってhtmlを削除するには、何が存在するのかを知る必要があります。私はそれについて間違っていますか? – PyNEwbie

+0

あなたはどういう意味が分かりませんか? divの最初のテーブルからby-class-or-idなどまで、無数の方法でHTMLを削除することができます。 – dbr

+0

BeautifulSoup.prettyify()は人生の節約に過ぎませんでした!ありがとう! – Gourneau

2

が、それは標準のpythonを使用することをお勧めします。..(ほとんどのHTMLがどのように恐ろしい与えられた)ことは困難であり、BeautifulSoupは、両方のHTML解析で素晴らしい仕事をしていません、とUnicodeを扱います特徴。例えば

replace\\xa0\xa0を置き換えます

string = unicode('Hello, \xa0World', 'utf-8', 'replace') 

または

string = unicode('Hello, \xa0World', 'utf-8', 'ignore') 

しかし、もし\xa0が本当にあなたにとって意味のないもので、それを削除したい場合は、ignoreを使用してください。

関連する問題