使用 Flask 和 Python,我有一个在 localhost 上运行的网站,它允许用户选择一个特定的月份来下载报告。根据选定的月份,我将导入我的网络抓取文件,该文件从另一个网站检索数据(需要登录)。我的网页抓取脚本使用 Mechanize。
这是单击下载按钮后导入我的网络抓取文件 (webscrape.py) 的代码部分(在 office.html 上完成选择):
@app.route('/office/', methods=['GET','POST'])
def office():
form=reportDownload()
if request.method=='POST':
import webscrape
return render_template('office.html', success=True)
elif request.method=='GET':
return render_template('office.html', form=form)
在 render_template 方法中,success=True 作为参数传递,这样我的 office.html 脚本将显示成功消息,如果不是(当它是 GET 请求时),它将显示表单供用户选择。这是我的 office.html 脚本:
{% extends "layout.html" %}
{% block content %}
<h2>Office</h2>
{% if success %}
<p>Report was downloaded successfully!</p>
{% else %}
<form action="{{ url_for('office') }}" method="POST">
<table width="70%" align="center" cellpadding="20">
<tr>
<td align="right"><p>Download report for: </p></td>
<td align="center"><p>Location</p>
{{form.location}}</td>
<td align="center"><p>Month</p>
{{form.month}} </td>
<td align="center"><p>Year</p>
{{form.year}} </td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td align="center">{{form.submit}} </td>
</tr>
</table>
</form>
{% endif %}
{% endblock %}
我遇到的问题是当我想进一步下载时,即第一次下载后,我回到办公室页面并再次下载报告。在第二次尝试时,显示成功消息,但没有下载任何内容。
在我的网页抓取脚本中,使用 mechanize 和 cookiejar,我在开头有这几行代码:
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
我继续进行网络抓取。
在我的终端(或命令提示符)上运行网络抓取文件时,脚本执行没有任何问题,即使我第二次或第三次运行它。所以我认为这可能是网站代码的问题。
任何建议将不胜感激!我尝试了不同的方法来解决问题,例如使用返回重定向,或者尝试清除 cookiejar 中的 cookie。到目前为止还没有工作,或者我可能错误地使用了这些方法。
先感谢您!