A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 丁柳 于 2019-5-9 14:55 编辑

做爬虫的时候,拿到的页面有可能大面积出现类似这样的字符&#dddd;&#xhhhh;&#name; HTM,这些字符是HTMLL、XML 等 SGML 类语言的转义序列(escape sequence)。它们不是「编码」。

以 HTML 为例,这三种转义序列都称作 character reference:
  • 前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。
  • 后一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。


numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。


有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码,因为数字字符引用只用到ASCII字符集里的字符。所以,即使在gb2312编码的网页中,也可以用NCR显示埃及的象形文字了。


如何在python中处理&#X开头的字符串呢?

# coding=utf-8

def dec(a):

    # &#x  开头  解码  :  以 &# 或 &#x 开头的字符串叫做 NCR 字符

    # 通过 py2.x下的HTMLParser 或 py3.x下的html 的 unescape() 方法来转换成能看懂的中文字符

    aa = a.replace(';', '').replace('&#x', '\\u').encode('utf-8').decode('unicode_escape')

    print(aa)



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马