用macron解析字母,例如使用lxml抓取网页时

时间:2014-08-25 08:48:18

标签: python parsing lxml

尝试解析Te Reo Maori中的单词时出现此错误

Pāngarau - 我假设它是macron

UnicodeEncodeError:'ascii'编解码器无法编码字符u'\ u0101'

关于如何解决这个问题的任何想法?

from lxml import html
import requests

page = requests.get('http://www.nzqa.govt.nz/qualifications-standards/qualifications/ncea/subjects/')
tree = html.fromstring(page.text)

text = tree.xpath('//*[@id="mainPage"]/table[1]/tbody/tr[1]/td[3]/a')

print text[0].text

追踪(最近一次呼叫最后一次):

  File "/Users/Teacher/Documents/Python/Standards/rip_html2.py", line 10, in <module>
    print text[0].text
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0101' in position 1: ordinal not in range(128)
[Finished in 0.5s with exit code 1]

2 个答案:

答案 0 :(得分:2)

在Python2中,当您检查Element的text属性时,lxml有时会returns strs, and sometimes unicode

当文本完全由ascii字符组成时,它返回str,否则返回unicode

在发生错误时,text[0].text是包含字符unicode的{​​{1}}。

要修复错误,请在打印前将u'\u0101'显式编码为字节字符串:

unicode

请注意print(text[0].text.encode('utf-8')) 只是众多encodings you could use中的一个。


通常,如果要打印到终端,Python将检测终端使用的编码,并使用该编码对utf-8进行编码,从而将字节打印到终端。

由于您收到错误

unicode

看起来您可能正在打印到文件,或者Python无法确定输出设备的编码。由于输出设备只接受字节(从不是unicode),因此必须对所有unicode进行编码。在这种情况下,Python2会自动尝试使用UnicodeEncodeError: 'ascii' codec can't encode character u'\u0101' in position 1: ordinal not in range(128) 编解码器对unicode进行编码。因此错误。

另见:PrintFails wiki page

答案 1 :(得分:-1)

可能是因为默认情况下Python 2仅支持ASCII字符串,除非明确提到。要使用Unicode而不是ASCII,可以在脚本的第一行添加以下行:

# -*- coding: utf-8 -*-