UnicodeDecode错误:在写入与非英文字符相关的xls(x)时解码

我试图找出从哪里开始,我已经用尽search,所以会喜欢一些关于下一步可能的build议,甚至更好的select。

简介:我使用python从网站上刮取结果,然后将这些数据写入xls(x)doc。 我在csv上select了xls(x),因为我的csv在保存时保留了非英文字符。

我已经成功地在英文页面上运行这个代码,但是一旦我点击非英文字符,就会在write()上抛出下面的错误。

要注意的是,我也尝试过string.decode('utf-8') ,但是会抛出“'ascii'编解码器无法编码字符”的错误。

问题:我需要做些什么来正确地把这些写入xls(x)? 我已经能够做到这一点没有问题的CSV,但正如我所提到的,保存它的格式。 我是否需要以不同的方式进行编码,以便write()函数能够正确传输它?

对于下面的代码,我已经导入了scrapy,编解码器,xlsxwriter(Workbook)以及其他一些代码。

 # set xpaths: item_1 = 'xpath' item_2 = 'xpath' item_3 = 'xpath' item_4 = 'xpath' pagination_lookup = {} results = [] def write_to_excel(list_of_dicts,filename): filename = filename + '.xlsx' ordered_list = list(set().union(*(d.keys() for d in list_of_dicts))) # OR set up as actual list of keys (eg ['Listing Title','Item Price', etc.]) wb=Workbook(filename) ws=wb.add_worksheet("Sheet 1") #or leave it blank, default name is "Sheet 1" first_row=0 for header in ordered_list: col=ordered_list.index(header) # to keep order ws.write(first_row,col,header) # to write first row/header row=1 for each_dict in list_of_dicts: for _key,_value in each_dict.items(): col=ordered_list.index(_key) ws.write(row,col,_value) row+=1 #enter the next row wb.close() name = 'Scraper' # AREA FOR CODE TO GATHER AND SCRAPE URLS (taken out for brevity) driver.get(clean_url) time.sleep(2) selectable_page = Selector(text=driver.page_source) ResultsDict = {} ResultsDict['item_1'] = selectable_page.xpath(item_1).extract_first().encode('utf-8') ResultsDict['item_2'] = selectable_page.xpath(item_2).extract_first().encode('utf-8') ResultsDict['item_3'] = selectable_page.xpath(item_3).extract_first().encode('utf-8') ResultsDict['item_4'] = selectable_page.xpath(item_4).extract_first().encode('utf-8') results.append(ResultsDict) print ResultsDict write_to_excel(results,'Scraped_results') 

代码在这个错误上搁浅,这个错误是由任何非英文字符(例如ñ,ô,ä等)的值触发的。

Traceback(最近一次调用的最后一个):文件“/Users/name/scraper1/scraper1/spiders/scraped_results.py”,第128行,在write_to_excel(results,'Scraped_results')[…] File“/ usr / local /在写入数据时,第369行的“Cellar / python / 2.7.11 / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / codecs.py”消费= self.encode(object,self.errors)UnicodeDecodeError: 'ascii'编解码器无法解码位置39中的字节0xc3:序号不在范围内(128)

问题:我需要做些什么来正确地把这些写入xls(x)? 我已经能够做到这一点没有问题的CSV,但正如我所提到的,保存它的格式。 我是否需要以不同的方式进行编码,以便write()函数能够正确传输它?

我猜你正在使用Python 2.x,当你将一个字节string传递给需要Unicodestring的东西时,它会帮助你做一个decode 。 不幸的是,几乎没有做正确的事情,这就是为什么他们在Python 3中删除了这个能力。

你在创buildstring时使用.encode('utf-8') 。 将它closures,然后将Unicodestring传递到write_to_excel