我正在用lxml抓取一个网页。有一次,我得到了一个表格单元格的内容。
# get last name
lastNameContainer = tableRow.xpath('./td[@class="lastName"]');
lastName = lastNameContainer[0].text
不幸的是,一个表格单元格的字符超出了ASCII的范围,从而产生了这个错误。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-7: ordinal not in range(128)
我尝试将其添加到我的Python文件的顶部无济于事。
#!/usr/bin/python
# -*- coding: utf-8 -*-
如何解决这个问题?我还想存放这个角色。顺便说一下,这个字符是♀或♂,具体取决于表格行。
更新:我意识到当我将数据写入文件时会触发错误:
with open('myData.txt', 'w') as myFile:
myFile.write(lastName + '\n')
奇怪的是,这仍然会产生上述错误。
with open('myData.txt', 'w') as myFile:
myFile.write(lastName.decode('utf-8') + '\n')
答案 0 :(得分:1)
lxml需要unicode中的字符串。当我得到该异常时,我使用decode('utf-8')
解决它。
ie:E.doc('♀'.decode('utf-8'))
更新:
with open('myData.txt', 'w') as myFile: myFile.write(lastName + '\n')
奇怪的是,这仍然会产生上述错误。
with open('myData.txt', 'w') as myFile: myFile.write(lastName.decode('utf-8') + '\n')
另请注意,如果lastName为unicode
并且您尝试编写UTF-8
编码文件,则需要将其转换回lastName.encode('utf-8')
with open('myData.txt', 'w') as myFile:
myFile.write(lastName.encode('utf-8') + '\n')