网页抓取中山市最近每天的最高气温,将数据处理结果保存进入MySQL,用pyecharts处理结果可视化,然后用flask联通前后端(mysql->pyecharts网页)网页还需要有用户密码登录界面,用到URL构建,HTTP方法(POST),这个项目的实现步骤及代码
时间: 2023-12-23 22:06:31 浏览: 78
实现步骤:
1. 使用 Python 的 requests 库抓取中山市每日最高气温数据,可以使用免费的天气 API 服务,将数据保存到本地文件中。
2. 使用 Python 的 pandas 库读取本地文件中的数据,对数据进行清洗和处理,将处理后的数据保存到 MySQL 数据库中。
3. 使用 Python 的 pyecharts 库,生成可视化图表,将生成的图表保存到本地文件中。
4. 使用 Python 的 Flask 框架,搭建一个简单的网站,实现用户密码登录界面,使用 URL 构建和 HTTP 方法(POST)实现数据传输。
5. 在网站上使用 pyecharts 的可视化图表,展示处理后的数据。
代码实现:
1. 抓取天气数据并保存到本地文件
```python
import requests
import json
url = "https://restapi.amap.com/v3/weather/weatherInfo?key=<your_key>&city=中山"
response = requests.get(url)
data = json.loads(response.text)
with open("weather_data.json", "w") as f:
f.write(json.dumps(data))
```
2. 处理数据并保存到 MySQL 数据库
```python
import pandas as pd
import pymysql
# 读取数据
with open("weather_data.json", "r") as f:
data = json.loads(f.read())
# 处理数据
df = pd.DataFrame(data["forecasts"][0]["casts"])
df["date"] = pd.to_datetime(df["date"])
df["high"] = df["daytemp"]
df = df[["date", "high"]]
df = df.set_index("date")
# 保存到 MySQL 数据库
conn = pymysql.connect(host="localhost", user="root", password="", database="test")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS weather(date DATE, high INT)")
for index, row in df.iterrows():
sql = "INSERT INTO weather(date, high) VALUES ('{}', {})"
cursor.execute(sql.format(index.strftime("%Y-%m-%d"), row["high"]))
conn.commit()
cursor.close()
conn.close()
```
3. 使用 pyecharts 生成可视化图表并保存到本地文件
```python
from pyecharts.charts import Line
from pyecharts import options as opts
import pymysql
# 从 MySQL 数据库读取数据
conn = pymysql.connect(host="localhost", user="root", password="", database="test")
cursor = conn.cursor()
cursor.execute("SELECT date, high FROM weather")
data = cursor.fetchall()
cursor.close()
conn.close()
# 处理数据
x_data = [str(date) for date, _ in data]
y_data = [high for _, high in data]
# 生成图表
line = Line()
line.add_xaxis(x_data)
line.add_yaxis("最高气温", y_data)
# 设置图表标题和样式
line.set_global_opts(title_opts=opts.TitleOpts(title="中山市最近每天的最高气温"))
line.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 保存图表到本地文件
line.render("weather.html")
```
4. 使用 Flask 框架搭建网站并展示可视化图表
```python
from flask import Flask, render_template, request, redirect, url_for
import pymysql
app = Flask(__name__)
app.config["SECRET_KEY"] = "secret_key"
@app.route("/")
def index():
return render_template("login.html")
@app.route("/login", methods=["POST"])
def login():
username = request.form["username"]
password = request.form["password"]
if username == "admin" and password == "password":
return redirect(url_for("weather"))
else:
return render_template("login.html", error="用户名或密码错误")
@app.route("/weather")
def weather():
# 从 MySQL 数据库读取数据
conn = pymysql.connect(host="localhost", user="root", password="", database="test")
cursor = conn.cursor()
cursor.execute("SELECT date, high FROM weather")
data = cursor.fetchall()
cursor.close()
conn.close()
# 处理数据
x_data = [str(date) for date, _ in data]
y_data = [high for _, high in data]
# 渲染模板并传递数据
return render_template("weather.html", x_data=x_data, y_data=y_data)
if __name__ == "__main__":
app.run(debug=True)
```
5. 在模板文件中展示可视化图表
```html
<!DOCTYPE html>
<html>
<head>
<title>中山市最近每天的最高气温</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.2/dist/echarts.min.js"></script>
</head>
<body>
<div id="chart" style="width: 800px;height:400px;"></div>
<script>
var chart = echarts.init(document.getElementById("chart"));
var option = {
title: {
text: "中山市最近每天的最高气温",
left: "center"
},
xAxis: {
type: "category",
data: {{ x_data|tojson }}
},
yAxis: {
type: "value"
},
series: [{
type: "line",
data: {{ y_data|tojson }}
}]
};
chart.setOption(option);
</script>
</body>
</html>
```
以上是一个简单的实现步骤和代码示例,可以根据实际需求进行修改和优化。
阅读全文