我已经浏览了这个网站上的所有问题并且用谷歌搜索但是真的很难拿出Beautifulsoup输出(看起来像是列表)并以csv格式返回它以便我的Flask应用程序的用户可以在浏览器中下载。这是代码:
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模块。任何人都可以建议如何从html生成原始csv数据,以便它可以传递到代码的return response()部分中的'rfile'变量,因为我无法使其工作?
例如,如果我遍历csv.reader对象并打印我得到的每一行,
<'>'''姓','姓','部门','经理','缺席期','晚期实例'] ['Renata','Krzysik','礼物','MichaeldeJäger','0缺席','0迟到'] ......
...但我无法解决如何解析csv格式(没有列表和html标签)并将其分配给rfile变量?
答案 0 :(得分: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