1

パイソン 2.7

Web ページのソース コードからビデオ タイトルを取得するプログラムがありますが、タイトルは HTML 形式でエンコードされています。

これは私がこれまでに試したことです:

>>> import urllib2
>>> urllib2.unquote('£')
'£'

それはうまくいきませんでした...それから私は試しました:

>>> import HTMLParser
>>> h = HTMLParser.HTMLParser()
>>> h.unescape('£')
u'\xa3'

ご覧のとおり、どちらも機能せず、2 つの組み合わせも機能しません。

'£'それが HTML 文字の実体名であることがわかりました。「\xa3」は見つけられませんでした。

これを行う方法、PythonでHTMLコンテンツを読み取り可能な形式に変換する方法を知っている人はいますか?

4

4 に答える 4

1

なぜそれがうまくいかないのですか?

In [1]: s = u'\xa3'

In [2]: s
Out[2]: u'\xa3'

In [3]: print s
£

HTML エンティティのエスケープ解除に関しては、私はいつもhttp://effbot.org/zone/re-sub.htm#unescape-htmlを使用していました。

于 2012-07-28T21:13:07.347 に答える
1

ビデオ タイトル文字列は、HTML エンティティを使用して、アンパサンドやポンド記号などの特殊文字をエンコードします。

ポンド記号(£)\xa3の Python Unicode 文字リテラルです。あなたの例では、Python はUnicode 文字列の__repr__()を表示しているため、エスケープが表示されます。この文字列を印刷すると、ポンド記号を表していることがわかります。

>>> import HTMLParser
>>> h = HTMLParser.HTMLParser()
>>> h.unescape('£')
u'\xa3'
>>> print h.unescape('£')
£
于 2012-07-28T21:15:57.943 に答える
1

£POUND SIGNの html 文字エンティティであり、Unicode 文字 U+00A3 です。印刷すると次のように表示されます。

>>> print u'\xa3'
£

を使用するunescape()と、文字エンティティがネイティブ Unicode 文字に変換されますu'\xa3'。つまり、単一の U+00A3 Unicode 文字です。

これを別の形式 (utf-8 など) にエンコードする場合はencode、文字列のメソッドを使用して行います。

>>> u'\xa3'.encode('utf-8')
'\xc2\xa3'

単一の "POUND SIGN" 文字を表す 2 バイトの文字列を取得します。

文字列エンコーディングが一般的にどのように機能するかについて、少し不明確であると思います。文字列をバイトからユニコードに変換する必要があります( urllib2でそれを行う1つの方法については、この回答を参照してください)。次に、htmlをエスケープ解除し、(おそらく)ユニコードを必要な出力エンコーディングに変換します。

于 2012-07-28T21:28:35.960 に答える
0

lxml、BeautifulSoup、または PyQuery は、かなりうまく機能します。またはこれらの組み合わせ;)

于 2012-07-29T20:53:41.583 に答える