9

Web スクレイピング中に、すべての html タグを削除した後、Unicode で黒い電話文字 \u260e を取得しました (☎)。しかし、この応答とは異なり、私もそれを取り除きたいと思っています。

Scrapy で次の正規表現を使用して、html タグを削除しました。

pattern = re.compile("<.*?>|&nbsp;|&amp;",re.DOTALL|re.M)

それから私は\u260eと一致させようとしましたが、バックスラッシュの疫病にかかったと思います. 私はこのパターンを試してみましたが失敗しました:

pattern = re.compile("<.*?>|&nbsp;|&amp;|\u260e",re.DOTALL|re.M)
pattern = re.compile("<.*?>|&nbsp;|&amp;|\\u260e",re.DOTALL|re.M)
pattern = re.compile("<.*?>|&nbsp;|&amp;|\\\\u260e",re.DOTALL|re.M)

これはどれも機能せず、出力としてまだ\u260eがあります。これどうやったら消えますか?

4

3 に答える 3

7

Python 2.7.3 を使用すると、次のように動作します。

import re

pattern = re.compile(u"<.*?>|&nbsp;|&amp;|\u260e",re.DOTALL|re.M)
s = u"bla ble \u260e blo"
re.sub(pattern, "", s)

出力:

u'bla ble  blo'

@Zackが指摘したように、これは文字列が現在ユニコードになっているため、つまり文字列はすでに変換されており、文字列は\u260eおそらく-小さな黒い電話を書くために使用される2バイトであるという事実のために機能します☎ (:

検索する文字列と正規表現の両方に、文字のシーケンスではなく、黒い電話自体が含まれていると\u260e、両方が一致します。

于 2013-05-06T15:24:37.293 に答える
4

文字列が既に Unicode である場合、2 つの簡単な方法があります。2 つ目は、☎ 以外にも影響を与えることは明らかです。

>>> import string                                   
>>> foo = u"Lorum ☎ Ipsum"                          
>>> foo.replace(u'☎', '')                           
u'Lorum  Ipsum'                                     
>>> "".join(s for s in foo if s in string.printable)
u'Lorum  Ipsum'      
于 2013-05-06T15:27:02.290 に答える
1

ここで説明されているように、次のようなものでBeatfulSoupを試すことができます

soup = BeautifulSoup (html.decode('utf-8', 'ignore'))
于 2013-05-06T15:29:40.517 に答える