62899


やりたいこと。  
csvファイルをつくる  
コンテンツは、htmlタグ付きのままスクレイピングしたもの。  
しかし、余計なクォーテーションがついてしまう。

[![余計なquotation](https://i.stack.imgur.com/6W8QM.jpg)](https://i.stack.imgur.com/6W8QM.jpg)

原因はstr()をつかったことだとおもいます。なぜなら、prettify()ではこのようなことがおこらなかったからです。  
csvに書き出すためにどのような型に変換すればいいのでしょうか？

[code]

        for def_el in definition_list:
            def_list.append(str(def_el))
    
        sections_string = '<hr>'.join(def_list)
    
        return sections_string
    
[/code]

このCSVファイルは、あとでHTML形式で表示する単語帳練習アプリにインポートする予定なので、htmlタグが必要です。

これがソースコードです。

[code]

    read_input = input('Read Mode Enter file name e.g.) vocab.csv:')
    write_input = input('Write Mode Enter name e.g.) appended_vocab.csv:')
    with open(read_input, 'r', encoding='utf-8-sig') as csv_file,\
        open(write_input, 'w', encoding='utf-8', newline='') as new_file:
        csv_reader = csv.reader(csv_file)
        csv_writer = csv.writer(new_file)
    
        normal_word = 0
        for line in csv_reader:
            def_list = []
            if not normal_word:
                # scraping()は下の方にあります。
                definition = scraping(line[0].lstrip('\ufeff'))
                normal_word =+1
            else:
                definition = scraping(line[0])
    
            if not definition:
                print('no web for:' + line[0])
                csv_writer.writerow([line[0],''])
            else:
                csv_writer.writerow([line[0],definition])
    
[/code]

読み込んだcsvファイルの一列目が単語になっています。


CC BY-SA 4.0
2020-02-09T04:47:53.367
62896
2020-02-10T08:07:27.667
2020-02-09T12:17:44.153
36091
36091
question
python python3 csv web-scraping beautifulsoup
スクレイピングしたものをcsvに書き出すと余計な " が属性につく。


一般的なCSVフォーマットでは、値に`"`が含まれる場合、出力されるCSVテキストは

[code]

    aa"b"cc -> "aa""b""cc"
    
[/code]

こうなります。なので正常に処理されているように見えます。

読み込み側のソフトで`"`が含まれるデータが想定されているのであれば、そのまま読み込めるはずです。


CC BY-SA 4.0
2020-02-09T05:35:03.703
62899
2020-02-09T05:35:03.703
5793
62896
answer


出力したCSVを後で読み込む時のことを考えると、基本的には suzukis さんが回答している通りクォートされたままの方が扱いやすいのだと思いますが、csv
モジュールの定義を見るとパラメータで任意のクォート文字列に変更したり、クォートの挙動を変えることも可能なようです。

[CSV ファイルの読み書き - Python
ドキュメント](https://docs.python.org/ja/3/library/csv.html#csv.writer)

>
[code]

>     import csv
>     with open('eggs.csv', 'w', newline='') as csvfile:
>        spamwriter = csv.writer(csvfile, delimiter=' ',
>                                quotechar='|', quoting=csv.QUOTE_MINIMAL)
>  
[/code]

[csv – カンマ区切りのファイル](http://ja.pymotw.com/2/csv/)

> **クォート処理**
>
> csv モジュールで定数として定義された4種類の quoting オプションがあります。
>
>   * QUOTE_ALL  
>  型に関係なく全てをクォートする
>
>   * QUOTE_MINIMAL  
>  (同じ dialect やオプションで設定されたパーサを混乱させる任意の)特別文字をもつフィールドをクォートする、デフォルトのオプション
>
>   * QUOTE_NONNUMERIC  
>  整数や浮動小数ではない全てのフィールドをクォートする、reader で使用するとクォートされない入力フィールドは浮動小数に変換される
>
>   * QUOTE_NONE  
>  何もクォートしない、reader で使用すると引用符はフィールドの値に含まれる(通常は、デリミタのように扱われて取り除かれる)
>
>


CC BY-SA 4.0
2020-02-10T08:07:27.667
62922
2020-02-10T08:07:27.667
3060
62896
answer