2016-11-15 13 views
4

私はアムステルダムのレストラン500軒のリストを取得しようとしています。しかし、私は次のエラーを取得する第三百八レストランの後:UnicodeEncodeError: 'ascii'コーデックは、位置6にu ' u2019'をエンコードできません:序数は範囲外です(128)

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 
+0

'cuisine_type'は' .split'を使用しているためリストです(なぜ非分割スペースで分割しているのかわかりません...)。しかし、 '.writerow'に渡す行の内容は文字列または数字である必要があります。また、Python 2の 'csv'モジュールを使用する場合、[docs](https://docs.python.org/2/library/csv.html)に記載されているように、バイナリモードでCSVファイルを開くはずです。 。この記事が参考になるかもしれません:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)、SOベテランのNed Batchelderによって書かれました。 –

答えて

4

rest_arrayには、ユニコード文字列が含まれています。 csv.writerを使用して行を書き込むときは、バイト文字列をシリアル化する必要があります(これはPython 2.7上にあります)。

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) 

注:

は、私はあなたが「UTF8」のエンコーディングを使用することをお勧めしますが、組み込み関数file()open()機能の別名)をシャドウするので、変数としてfileを使用しないでください。

このCSVファイルをMicrosoft Excelで開く場合は、「cp1252」などの別のエンコーディングを使用することを検討してください(「\ u2019」文字を使用できます)。

+0

それは魅力のように働いた!ありがとうございました! – dtrinh

1

あなたのcsv出力ファイルにASCII以外の文字を書き込みます。キャラクタをエンコードできる適切な文字エンコーディングで出力ファイルを開くことを確認してください。安全な賭けは、しばしばUTF-8です。これは、Pythonの3.xのために残念である

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

が編集:これを試してみてください。

+0

彼はPython 3でこのエラーが発生しないと思う。彼の質問は 'python-2.7'とタグ付けされている。 –

+0

あなたは正しい、それを逃した –

関連する問題

 関連する問題