2016-09-07 6 views
0

私はこのサイトのすべての質問をしてきましたが、グーグルではありましたが、Beautifulsoupの出力(リストのようです)を取得してcsv形式私のFlaskアプリはブラウザでダウンロードできます。コードは次のとおりです。Parse BeautifulsoupをダウンロードするためにCSVファイルに出力する

html = col_result.__html__() 
bs = BeautifulSoup(html) 
table = bs.find(lambda tag: tag.name == 'table') 
headers = table.findAll(lambda tag: tag.name == 'th') 
rows = table.findAll(lambda tag: tag.name == 'tr') 

with open('export_file.csv', 'w+', newline='') as f: 
    file = csv.writer(f) 
    file.writerow(headers) 
    file.writerows(rows) 
rfile = csv.reader(open('export_file.csv', newline='')) 

return Response(
    rfile, 
    mimetype="text/csv", 
    headers={"Content-disposition": 
      "attachment; filename=export_file.csv"}) 

ダウンロードしたcsvファイルは空白です。私はCSV & bs4モジュールをインポートしました。誰も私がこれを動作させることができないので、コードの返信応答()セクションで 'rfile'変数に渡すことができるように、HTMLから生のcsvデータを生成する方法をアドバイスできますか?

例えば

私はcsv.readerオブジェクトを反復処理し、私が手にそれぞれの行を印刷する場合、

[「ファーストネーム」、「姓」、「部門」、「マネージャー」、「不在の期間」、 '後期インスタンス'] [ 'レナータ'、 'Krzysik'、 'ギフト'、 'マイケル・デ・イェーガー'、 '0不在'、 '0遅刻'] ...

...しかし、私はカントcsv形式(listとhtmlタグなし)を解析してrfile変数に割り当てる方法を考えてください。

+0

あなただけの 'csv.writer()'ファイルにそのデータを書き込むために使用することができます。 –

+0

'file'自体を添付ファイルとして返すのではなく、' csv'ファイルの内容を返そうとしましたか? – Tempux

+1

なぜあなたは 'table.find_all( 'th')'などを使っていませんか?ラムダのポイントは何ですか? –

答えて

1

Responseクラスの最初のパラメータは

応答する必要があります -

反復可能な文字列または応答だから私はあなたがこのパラメータとしてcsv.readerを渡すことができるとは思いません。代わりにファイルの内容をstringに渡すようにしてください。

それともmake_responseを使用して、それにcsvファイルの内容を渡すことができます。

from flask import make_response 

html = col_result.__html__() 
bs = BeautifulSoup(html) 
table = bs.find(lambda tag: tag.name == 'table') 
headers = table.findAll(lambda tag: tag.name == 'th') 
rows = table.findAll(lambda tag: tag.name == 'tr') 

with open('export_file.csv', 'w+', newline='') as f: 
    file = csv.writer(f) 
    file.writerow(headers) 
    file.writerows(rows) 

with open('export_file.csv', 'r') as csv: 
    response = make_response(csv.read()) 
    response.headers["Content-Disposition"] = "attachment; filename=books.csv" 
    return response 
+0

ありがとう、私は必要なものでした! – MattE

関連する問題