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

問題はおそらくエンコーディングの1つであり、バイトと文字の違いです。CSVファイルはどのエンコーディングで作成されましたか?£記号が出現するファイルには、どのバイトシーケンスがありますか?変数に含まれるバイトは何priceですか?文字列で実際に発生するバイトを置き換える必要があります。パズルの1つは、ソースコードのデータの内容です。ここ# -*- coding: utf-8 -*-で、ソースの上部にあるマーカーが重要になります。これは、文字列リテラルのバイトを解釈する方法をPythonに指示します。文字を置き換える前に、CSVファイルからバイトをデコードしてUnicode文字列を作成する必要がある(または必要になる)可能性があります。

Python2.7のcsvモジュールのドキュメントには次のように書かれていることを指摘します。

注:このバージョンのcsvモジュールは、Unicode入力をサポートしていません。また、現在、ASCIINUL文字に関していくつかの問題があります。したがって、安全のために、すべての入力は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 に答える