【问题标题】:Python CSV cant encode characterPython CSV无法编码字符
【发布时间】:2014-11-29 01:46:59
【问题描述】:

使用 Python an Beautiful Soup,我创建了一个脚本,该脚本从网站上获取企业的名称、地址和电话号码,并将输出保存到 CSV 文件的三列中。

该脚本运行良好,但当我获得如下公司名称时它停止了:

u'\nLevel 12, 280 George Street SYDNEY\xa0 NSW\xa0 2000. . Sydney. NSW 2000\n'

问题出在“xa0”部分。错误消息指出:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 35: ordinal not in range(128)

我对这个错误的含义有一个模糊的概念,但不知道如何处理它。有什么想法吗?

谢谢

编辑:

我的脚本如下:

import bs4
import requests

page = requests.get('http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx?Page=0')
soup = bs4.BeautifulSoup(page.content)

for company in soup.select('table#ctl00_ContentPlaceHolder1_dgLawyers tr > td > table'):
     name = company.a.text
     address = company.find_all('tr')[1].text
     phone = company.tr.find_all('td')[1].text
     with open('/home/kwal0203/Desktop/eggs.csv', 'a') as csvfile:
             s = csv.writer(csvfile)
             s.writerow([name,address,phone])

【问题讨论】:

  • 您需要显示您正在使用的导致错误的代码,以及完整的回溯。
  • 所以您在写入 csv 文件时遇到此错误。您能分享一下您是如何编写 csv 文件的吗?
  • 我已将脚本添加到问题中,但不确定如何获取回溯?
  • 抱歉,我遗漏了部分脚本。一秒钟。

标签: python csv unicode ascii


【解决方案1】:

您需要在写入 csv 文件时将其编码为 utf-8 格式,因为 Python 的内置 csv 不支持 unicode。

def remove_non_ascii(text):
    return ''.join(i for i in text if ord(i)<128)


name = remove_non_ascii(company.a.text)
address = remove_non_ascii(company.find_all('tr')[1].text)
phone = remove_non_ascii(company.tr.find_all('td')[1].text)

with open('/home/kwal0203/Desktop/eggs.csv', 'a') as csvfile:
    s = csv.writer(csvfile)
    s.writerow([data.encode("utf-8") for data in [name,address,phone]])

或者你可以安装unicodecsv,默认支持unicode。

你可以这样安装。

pip install unicodecsv

【讨论】:

  • 嗨,当我使用您的代码时,我收到一条错误消息:TypeError: decoding Unicode is not supported
  • 您能否在您的问题中包含 [name,address,phone] 的样本,以便我可以试用您的数据。
  • 我的文件中没有数据。我只是用我写的脚本把它从这个网站http://accountantlist.com.au/x123-Accountants-in-Sydney.aspx 刮下来。
  • 这是问题文本:u'\nLevel 12, 280 George Street SYDNEY\xa0 NSW\xa0 2000. . Sydney. NSW 2000\n'。包含NSWxa0 部分
  • @kane 看到我添加了另一个函数 remove_non_ascii。它的作用是检查每个 char 是否为 ascii(ord
猜你喜欢
  • 2022-01-23
  • 2012-02-23
  • 2016-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多