UnicodeEncodeError:' ascii'编解码器不能编码字符u' \ u2019'位置6:序数不在范围内(128)

时间:2016-11-15 21:05:50

标签: python python-2.7 web-scraping python-unicode

我试图从TripAdvisor中提取阿姆斯特丹500家餐厅的名单;然而,在第308家餐厅之后,我收到以下错误:

Traceback (most recent call last):
  File "C:/Users/dtrinh/PycharmProjects/TripAdvisorData/LinkPull-HK.py", line 43, in <module>
    writer.writerow(rest_array)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 6: ordinal not in range(128)

我尝试了一些我在StackOverflow上找到的东西,但是现在没有任何工作。我想知道是否有人可以查看我的代码并查看任何可能的解决方案。

        for item in soup2.findAll('div', attrs={'class', 'title'}):
            if 'Cuisine' in item.text:
                item.text.strip()
                content = item.findNext('div', attrs=('class', 'content'))
                cuisine_type = content.text.encode('utf8', 'ignore').strip().split(r'\xa0')
        rest_array = [account_name, rest_address, postcode, phonenumber, cuisine_type]
        #print rest_array
        with open('ListingsPull-Amsterdam.csv', 'a') as file:
                writer = csv.writer(file)
                writer.writerow(rest_array)
    break

3 个答案:

答案 0 :(得分:11)

if fallback.true? Message: This text has not been translated yet and is shown in English 包含unicode字符串。使用rest_array写行时,需要序列化字节字符串(在Python 2.7上)。

我建议您使用“utf8”编码:

csv.writer

注意:请不要将with open('ListingsPull-Amsterdam.csv', mode='a') as fd: writer = csv.writer(fd) rest_array = [text.encode("utf8") for text in rest_array] writer.writerow(rest_array) 用作变量,因为您隐藏了内置函数filefile()函数的别名)。

如果要使用Microsoft Excel打开此CSV文件,可以考虑使用其他编码,例如“cp1252”(它允许使用“\ u2019”字符)。

答案 1 :(得分:3)

您正在为csv输出文件编写非ascii字符。确保使用允许对字符进行编码的相应字符编码打开输出文件。安全的赌注通常是UTF-8。试试这个:

with open('ListingsPull-Amsterdam.csv', 'a', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(rest_array)

编辑这适用于Python 3.x,抱歉。

答案 2 :(得分:0)

在脚本的开头添加这些行

import sys
reload(sys)
sys.setdefaultencoding('utf-8')