从网页输出解析数据时出现Python UnicodeEncodeError

时间:2016-03-08 18:15:59

标签: python python-2.7 unicode encoding

我有一个解析网页的程序,然后将数据写出其他地方。当我写数据时,我得到了

  

" UnicodeEncodeError:' ascii'编解码器无法对字符进行编码   19-21:序数不在范围内(128)"

我正在使用lxml收集数据。

name = apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text
worksheet.goog["Name"].append(name)

阅读http://effbot.org/pyfaq/what-does-unicodeerror-ascii-decoding-encoding-error-ordinal-not-in-range-128-mean.htm后,它建议我将所有变量记录在unicode中。这意味着我需要知道网站使用的编码。

我实际将数据写到某处的最后一行是:

wks.update_cell(row + 1, worksheet.goog[value + "_col"], (str(worksheet.goog[value][row])).encode('ascii', 'ignore'))

假设编码是UTF-8,我将如何使用unicode进行合并,我希望它在出路时是ASCII?

2 个答案:

答案 0 :(得分:1)

你的错误是因为:

str(worksheet.goog[value][row]) 

调用str你正在尝试编码ascii,你应该做的是编码为utf-8:

 worksheet.goog[value][row].encode("utf-8") 

至于如果假设编码是UTF-8,我将如何使用unicode进行合并,我希望它在出路时是ASCII?去,你不能没有ascii latin ă等...除非你想使用类似Unidecode的东西获得最接近的ascii等价物。

答案 1 :(得分:0)

我想我可能已经解决了我自己的问题。

apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text

实际上默认为unicode。所以我所做的就是将这一行改为:

name = (apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text).encode('ascii', errors='ignore')

我输出时没有改变任何东西:

wks.update_cell(row + 1, worksheet.goog[value + "_col"], worksheet.goog[value][row])

由于数据的性质,ASCII只是很好。虽然,我可以使用UTF-8并捕获一些额外的字符......但这与问题无关。

:)