如何在网页抓取时绕过不受支持的字符?

时间:2012-03-09 07:54:15

标签: python web-scraping lxml

我正在用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')

1 个答案:

答案 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')