首页 > 解决方案 > 使用 Flask 和 Web Scraping 绘图

问题描述

我无法获得输出。相反,我收到 404 错误。在这里,在代码中,图像离线保存,但是我希望图像在线生成,而不是在本地保存,然后在网页上显示。

以下是我通过网络抓取数据绘制收益率曲线的代码。

from flask import Flask, render_template
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import bs4
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen

app = Flask(__name__)

@app.route('/plot')
def plot():
    url = 'https://www.ccilindia.com/RiskManagement/SecuritiesSegment/Pages/ZCYCCurrent.aspx'
    try:
     page = urlopen(url)
    except:
     print('Error opening the URL')
     
    soup = bs4.BeautifulSoup(page,'html.parser')
    Beta_0 = float(soup.find_all('td',{'class': 'ms-vb2'})[4].text)
    Beta_1 = float(soup.find_all('td',{'class': 'ms-vb2'})[5].text)
    Beta_2 = float(soup.find_all('td',{'class': 'ms-vb2'})[6].text)
    Beta_3 = float(soup.find_all('td',{'class': 'ms-vb2'})[7].text)
    Tau_1 = float(soup.find_all('td',{'class': 'ms-vb2'})[8].text)
    Tau_2 = float(soup.find_all('td',{'class': 'ms-vb2'})[9].text)
    
    tenor = []; NSS = []
    for i in range(1,42):
        tenor.append(i)
    for i in range(len(tenor)):    
        NSS.append(Beta_0+Beta_1*(1-np.exp(-tenor[i]/Tau_1))/(tenor[i]/Tau_1)+\
        Beta_2*(((1-np.exp(-tenor[i]/Tau_1))/(tenor[i]/Tau_1))-np.exp(-tenor[i]/Tau_1))+\
        Beta_3*(((1-np.exp(-tenor[i]/Tau_2))/(tenor[i]/Tau_2))-np.exp(-tenor[i]/Tau_2)))
    print(NSS)
    
    plt.title('Yield Curve')
    plt.xlabel('Tenor')
    plt.ylabel('Yield rate')
    plt.plot(tenor, NSS)

    plt.savefig('static/images/plot.png')

    return render_template('yield.html', url='/static/images/plot.png')

if __name__ == '__main__':
   app.run()

下面是 yield.html 的 HTML 代码

<html>
   <body>

      <h1>Price Chart</h1>

      <p>{{ name }}</p>

      <img src="/plot.png" alt="my plot">

   </body>
</html>

我的错误

runfile('E:/MSE/Website/yield demo.py', wdir='E:/MSE/Website')
 * Serving Flask app "yield demo" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [14/Jul/2020 09:47:45] "GET / HTTP/1.1" 404 -
INFO:werkzeug:127.0.0.1 - - [14/Jul/2020 09:47:45] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [14/Jul/2020 09:47:57] "GET /plot.png HTTP/1.1" 404 -
INFO:werkzeug:127.0.0.1 - - [14/Jul/2020 09:47:57] "GET /plot.png HTTP/1.1" 404 -
127.0.0.1 - - [14/Jul/2020 09:48:35] "GET /static/images/plot.png HTTP/1.1" 404 -
INFO:werkzeug:127.0.0.1 - - [14/Jul/2020 09:48:35] "GET /static/images/plot.png HTTP/1.1" 404 -

标签: pythonflask

解决方案


404 错误表示您尝试访问的页面不存在。我认为如果您想离线保存它,您应该通过 AWS 的 S3 实例来完成,以尽可能轻松地引用图像。


推荐阅读