1

蟒蛇 2.7

我有一个程序可以从网页的源代码中获取视频标题,但标题是以某种 HTML 格式编码的。

这是我迄今为止尝试过的:

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

所以那没有用......然后我尝试了:

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

如您所见,这既不起作用,也不起作用两者的任何组合。

我设法找出这'£'是一个 HTML 字符实体名称。'\xa3' 我没能找到。

有谁知道如何做到这一点,如何将 HTML 内容转换为 python 中的可读格式?

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 显示__repr__() Unicode 字符串,这就是您看到转义的原因。如果你打印这个字符串,你可以看到它代表井号:

>>> 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”字符的两字节字符串。

我怀疑您对字符串编码的一般工作方式有点不清楚。您需要将字符串从字节转换为 unicode(有关使用 urllib2 执行此操作的一种方法,请参阅此答案),然后对 html 进行转义,然后(可能)将 unicode 转换为您需要的任何输出编码。

于 2012-07-28T21:28:35.960 回答
0

lxml、BeautifulSoup 或 PyQuery 做得很好。或这些的组合;)

于 2012-07-29T20:53:41.583 回答