2016-05-22 2 views
-3
def scrapeFacebookPageFeedStatus(page_id, access_token): 
    # -*- coding: utf-8 -*- 

    with open('%s_facebook_statuses.csv' % page_id, 'wb') as file: 
     w = csv.writer(file) 
     w.writerow(["status_id", "status_message", "link_name", "status_type", "status_link", 
      "status_published", "num_likes", "num_comments", "num_shares"]) 

     has_next_page = True 
     num_processed = 0 # keep a count on how many we've processed 
     scrape_starttime = datetime.datetime.now() 

     print "Scraping %s Facebook Page: %s\n" % (page_id, scrape_starttime) 

     statuses = getFacebookPageFeedData(page_id, access_token, 100) 

     while has_next_page: 
      for status in statuses['data']: 
       w.writerow(processFacebookPageFeedStatus(status)) 

       # output progress occasionally to make sure code is not stalling 
       num_processed += 1 
       if num_processed % 1000 == 0: 
        print "%s Statuses Processed: %s" % (num_processed, datetime.datetime.now()) 

      # if there is no next page, we're done. 
      if 'paging' in statuses.keys(): 
       statuses = json.loads(request_until_succeed(statuses['paging']['next'])) 
      else: 
       has_next_page = False 


     print "\nDone!\n%s Statuses Processed in %s" % (num_processed, datetime.datetime.now() - scrape_starttime) 
scrapeFacebookPageFeedStatus(page_id, access_token) 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 40-43: ordinal not in range(128) 

Я пишу код, чтобы очистить через Facebook страниц, чтобы собрать все сообщения в CVS-файл. Код работает правильно, когда есть только английский язык, но ошибка появляется, когда я пытаюсь очистить страницы, которые публикуются на арабском языке. Я знаю, что решение - использовать utf-8, но я не знаю, как его реализовать в коде.Как я могу решить эту ошибку ASCii в питона

+0

не удалось опубликовать всю трассировку стека? –

+0

Вы пытались использовать функцию 'encode' для строки? –

ответ

0

Ваша проблема, вероятно, не в этом коде, я подозреваю, что это в вашей функцииFacebookPageFeedStatus. Но когда вы форматируете свои поля, вы хотите удостовериться, что все, что может содержать символы Юникода, все декодируются (или закодированы соответственно) в utf-8.

import codecs 

field_a = "some unicode text in here" 
field_a.decode('utf-8') -----> \u1234\u........ 
field_a.encode('utf-8') -----> Back to original unicode 

Ваш CSV, вероятно, не поддерживает Unicode, так что вам нужно декодировать каждое поле в ваших исходных данных.

Debugging юникод боль, но есть много С.О. сообщений о различных проблемах, связанных с кодированием/декодированием юникода

+0

Я решил, добавив импорт SYS перезарядки (SYS) .setdefaultencoding («UTF-8») и я панда читать и каждую вещь хорошо сейчас –

0

импорта SYS

перезарядки (SYS) .setdefaultencoding ("UTF-8")

Я добавил этот кусок кода, и он отлично работает, когда я открываю этот файл в пандах.

Нет других ошибок или что за это на данный момент

+0

Вы можете прочитать эту статью о том, что исправить, я нашел это информативным: https://anonbadger.wordpress.com/2015/06/16/why-sys-setdefaultencoding-will-break-code/ – Lost

+0

Я думаю, что я должен был прочитать ваш комментарий раньше, у меня возникают проблемы сейчас, когда я пытаюсь работать с любым текстом, любой идеей, как вернуть его или решить его проблемы! –

+0

Возможно, вам стоит искать похожие проблемы, и если вы не можете найти хорошую эквивалентную проблему, попробуйте опубликовать новый вопрос. Обязательно укажите примеры своих ошибок. Если у вас много проблем, возможно, слишком сложно попытаться обратиться к комментариям следующим образом: – Lost