15

最終的な出力がテキスト ファイルになるように、すべての HTML を文字列から削除しようとしています。私はさまざまな「コンバーター」についていくつかの調査を行っており、エンティティとシンボルの独自の辞書を作成し、文字列で置換を実行することに傾倒し始めています。プロセスを自動化したいのですが、基礎となる html の品質には多くのばらつきがあるため、これを検討しています。私のソリューションの速度と、pyparsing などの代替手段の 1 つを比較するために、文字列メソッド replace を使用して \xa0 の置換をテストすることにしました。私は得る

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

実際のコード行は

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

とにかく、r を前に付ける必要があると判断したので、次のコード行を実行しました。

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

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

4

6 に答える 6

25

あなたがやるべきかもしれません

s=unicodestring.replace(u'\xa0',u'')
于 2009-04-15T18:22:48.240 に答える
6
s=unicodestring.replace('\xa0','')

\xa0.. ASCII 文字列 (バージョン 3.x までの Python のデフォルトの文字列型) では無効なUnicode 文字を作成しようとしています。

r'\xa0'エラーが発生しなかった理由は、生の文字列ではエスケープ シーケンスが無効であるためです。Unicode 文字にエンコードしようとするのではなく\xa0、文字列を「リテラル バックスラッシュ」、「リテラル x」などとして認識しました。

以下は同じです。

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

デフォルトの文字列型は unicode であるため、これは Python v3 で解決されたものです。

>>> '\xa0'
'\xa0'

最終的な出力がテキスト ファイルになるように、すべての HTML を文字列から削除しようとしています。

これにはBeautifulSoupを強くお勧めします。HTML クリーニング ツールを作成するのは困難であり (ほとんどの HTML がどれほどひどいものであるかを考えると)、BeautifulSoup は HTML の解析と Unicode の処理の両方で素晴らしい仕事をします..

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
 <body>
  <h1>
   Hi
  </h1>
 </body>
</html>
于 2009-04-15T20:33:03.137 に答える
3

コーデックの標準ライブラリ、特にコーデックの基本クラスで提供されているエンコードメソッドとデコードメソッドを確認してください。

すべてをまとめた良い記事もここにあります。

于 2009-04-15T18:17:29.280 に答える
2

これの代わりに、標準の python 機能を使用することをお勧めします。

例えば:

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

また

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

どこreplaceを に置き換え\xa0ます\\xa0

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

于 2012-09-13T13:19:28.447 に答える
1

HTMLのクリーニングに関するメモ。とても大変です

<
body
>

HTMLを書くための有効な方法です。ただのfyi。

于 2009-04-15T18:18:02.027 に答える
0

次の方法でUnicodeに変換できます。

print u'Hello, \xa0World'  # print Hello,  World
于 2009-04-15T18:18:07.657 に答える