質問編集履歴

2 書式変更

4mmsod

4mmsod score 9

2015/07/25 13:57  投稿

ブラウザでcsvをダウンロードさせる方法【python】
OS: OS X 10.10.4 
Python:2.7.10 
nginX
uWSGI
AWS:ec2
pythonの勉強にクローラーを作成している者です。
ローカルでcsvファイルを作成することはできるようになったので、次はサーバを利用してcsvをURLにアクセスした人にダウンロードさせるようなものに変えようとしています。
そこで書いたスクリプトが
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import re
import urllib2
import sys
import csv
import codecs
from HTMLParser import HTMLParser
from werkzeug.datastructures import Headers
from werkzeug import Response
def application(environ, start_response):
   start_response("200 OK",[('Content-Type','text/html')])
   
   sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
   filename = "tabelog.csv"
   writecsv = csv.writer(file(filename, 'w'), lineterminator='n')
   sys.stdout = codecs.EncodedFile(sys.stdout, 'utf_8')
   
       for ...............#スクレイピング部分は長いので割愛
       row = (hoge1,hoge2,hoge3)
       writecsv.writerow(row)
   
   header = Headers()
   header.add('Content-Type', 'application/octet-stream');
   header.add('Content-Disposition', 'attachment', filename='tabelog.csv')
   return Response(w.getvalue(), headers=header)__**
こんな感じなのですが、実行すると
AttributeError: 'ResultSet' object has no attribute 'getvalue'
とエラーが返ってきます・・・。
サーバにスクリプト載せるのも初めてなので、コピペ頼りで書いたのでかなりおかしいかもしれません。
よろしければご教授お願いします。
追記
すみません、ヘッダフィールド記載ミスです・・・。
start_response("200 OK",[('Content-Type','application/octet-stream')])
です。
です。
追記2
try:
       return Response(w.getvalue(),headers=header)
   except AttributeError:
       return "hoge"
という風に例外処理にしてみたらテキストファイルに"hoge"と入力されて返ってくるようになりました。csvでほしいです・・・。
  • MacOS(OSX)

    2393 questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • AWS(Amazon Web Services)

    2604 questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • CSV

    884 questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

  • Python 2.7

    1471 questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

1 ヘッダの修正

4mmsod

4mmsod score 9

2015/07/25 12:44  投稿

ブラウザでcsvをダウンロードさせる方法【python】
OS: OS X 10.10.4 
Python:2.7.10 
nginX
uWSGI
AWS:ec2
pythonの勉強にクローラーを作成している者です。
ローカルでcsvファイルを作成することはできるようになったので、次はサーバを利用してcsvをURLにアクセスした人にダウンロードさせるようなものに変えようとしています。
そこで書いたスクリプトが
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import re
import urllib2
import sys
import csv
import codecs
from HTMLParser import HTMLParser
from werkzeug.datastructures import Headers
from werkzeug import Response
def application(environ, start_response):
   start_response("200 OK",[('Content-Type','text/html')])
   
   sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
   filename = "tabelog.csv"
   writecsv = csv.writer(file(filename, 'w'), lineterminator='n')
   sys.stdout = codecs.EncodedFile(sys.stdout, 'utf_8')
   
       for ...............#スクレイピング部分は長いので割愛
       row = (hoge1,hoge2,hoge3)
       writecsv.writerow(row)
   
   header = Headers()
   header.add('Content-Type', 'application/octet-stream');
   header.add('Content-Disposition', 'attachment', filename='tabelog.csv')
   return Response(w.getvalue(), headers=header)__**
こんな感じなのですが、実行すると
AttributeError: 'ResultSet' object has no attribute 'getvalue'
とエラーが返ってきます・・・。
サーバにスクリプト載せるのも初めてなので、コピペ頼りで書いたのでかなりおかしいかもしれません。
よろしければご教授お願いします。
よろしければご教授お願いします。
追記
すみません、ヘッダフィールド記載ミスです・・・。
start_response("200 OK",[('Content-Type','application/octet-stream')])
です。
  • MacOS(OSX)

    2393 questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • AWS(Amazon Web Services)

    2604 questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • CSV

    884 questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

  • Python 2.7

    1471 questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る