0

我想从使用 Beautifulsoup 从 url 解析的字符串中删除井号。我收到以下英镑符号错误。SyntaxError: 文件中的非 ASCII 字符 '\xa3'

我试图把它放在# -*- coding: utf-8 -*- 课程的开头,但仍然出现错误。

这是代码。得到浮点数后,我想将其写入 csv 文件。

    mainTag = SoupStrainer('table', {'class':'item'})
    soup = BeautifulSoup(resp,parseOnlyThese=mainTag)
    tag= soup.findAll('td')[3]
    price = tag.text.strip()

    pr = float(price.lstrip(u'£').replace(',', ''))
4

1 回答 1

0

问题可能是编码以及字节与字符之一。CSV 文件是用什么编码创建的?出现 £ 符号的文件中的字节序列是什么?变量中包含的字节是什么price?您需要替换字符串中实际出现的字节。一个难题是源代码中数据的内容。这就是# -*- coding: utf-8 -*-源代码顶部的标记很重要的地方:它告诉 python 如何解释字符串文字中的字节。在替换字符之前,您可能需要(或想要)解码 CSV 文件中的字节以创建 Unicode 字符串。

我会指出Python 2.7 中 csv 模块的文档说:

注意:此版本的 csv 模块不支持 Unicode 输入。此外,目前还有一些关于 ASCII NUL 字符的问题。因此,为了安全起见,所有输入都应该是 UTF-8 或可打印的 ASCII;请参阅示例部分中的示例。

示例部分包含以下代码,演示将 csv 模块提供的字节解码为 Unicode 字符串。

import csv

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
    # csv.py doesn't do Unicode; encode temporarily as UTF-8:
    csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
                        dialect=dialect, **kwargs)
    for row in csv_reader:
        # decode UTF-8 back to Unicode, cell by cell:
        yield [unicode(cell, 'utf-8') for cell in row]
于 2013-03-11T16:40:34.350 回答