网页抓取(内容自选),将抓取的数据进行处理,结果保存进入mysql,利用pyecharts处理结果可视化,flask联通前后端,(mysql到pyecharts网页),有首页界面(bootstrap),有登录界面,这个实践项目在vscode上的教程
时间: 2024-06-08 08:07:24 浏览: 19
这是一个比较完整的Web开发项目,需要涉及到爬虫、数据处理、数据库、数据可视化、前后端交互等多个方面。下面是一个简单的步骤指南:
1. 爬虫部分
首先需要确定要抓取哪个网站的数据,以及需要抓取哪些内容。这里以抓取天气数据为例,使用Python的requests库和BeautifulSoup库来实现:
```python
import requests
from bs4 import BeautifulSoup
url = 'http://www.weather.com.cn/weather/101010100.shtml'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 获取天气数据
weather_data = []
for li in soup.select('#7d > ul > li'):
date = li.select('h1')[0].text
weather = li.select('.wea')[0].text
temperature = li.select('.tem')[0].text.replace('\n', '')
weather_data.append([date, weather, temperature])
# 打印天气数据
for data in weather_data:
print(data)
```
2. 数据处理部分
获取到数据之后,需要进行一些处理,比如将数据存入MySQL数据库中。这里使用Python的pymysql库连接MySQL数据库,并将数据插入表中:
```python
import pymysql
# 连接MySQL数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='testdb',
charset='utf8mb4'
)
# 创建游标对象
cursor = conn.cursor()
# 创建表
sql_create_table = '''
CREATE TABLE IF NOT EXISTS weather (
id INT AUTO_INCREMENT PRIMARY KEY,
date VARCHAR(20) NOT NULL,
weather VARCHAR(20) NOT NULL,
temperature VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
'''
cursor.execute(sql_create_table)
# 插入数据
for data in weather_data:
sql_insert = '''
INSERT INTO weather (date, weather, temperature)
VALUES (%s, %s, %s)
'''
cursor.execute(sql_insert, data)
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
```
3. 数据可视化部分
使用Python的pyecharts库来进行数据可视化。这里以折线图为例,展示每天的最高温度:
```python
from pyecharts.charts import Line
from pyecharts import options as opts
import pymysql
# 连接MySQL数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='testdb',
charset='utf8mb4'
)
# 查询数据
cursor = conn.cursor()
sql_query = '''
SELECT date, temperature FROM weather
'''
cursor.execute(sql_query)
results = cursor.fetchall()
# 处理数据
x_data = [result[0] for result in results]
y_data = [int(result[1].replace('℃', '')) for result in results]
# 绘制折线图
line = (
Line()
.add_xaxis(x_data)
.add_yaxis('最高温度', y_data)
.set_global_opts(title_opts=opts.TitleOpts(title='天气数据可视化'))
.render('line.html')
)
# 关闭游标和连接
cursor.close()
conn.close()
```
4. Flask部分
使用Flask框架来实现前后端交互。首先需要搭建一个简单的网页框架:
```python
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login')
def login():
return render_template('login.html')
if __name__ == '__main__':
app.run(debug=True)
```
然后可以在index.html页面中加入一个按钮,点击后可以触发数据可视化的操作:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>这是首页</h1>
<button onclick="location.href='/visualize'">数据可视化</button>
</body>
</html>
```
接下来在Flask中添加一个视图函数来进行数据可视化,并在visualize.html中嵌入可视化结果:
```python
from flask import Flask, render_template
from pyecharts.charts import Line
from pyecharts import options as opts
import pymysql
app = Flask(__name__)
# 网页首页
@app.route('/')
def index():
return render_template('index.html')
# 登录页面
@app.route('/login')
def login():
return render_template('login.html')
# 数据可视化页面
@app.route('/visualize')
def visualize():
# 连接MySQL数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='testdb',
charset='utf8mb4'
)
# 查询数据
cursor = conn.cursor()
sql_query = '''
SELECT date, temperature FROM weather
'''
cursor.execute(sql_query)
results = cursor.fetchall()
# 处理数据
x_data = [result[0] for result in results]
y_data = [int(result[1].replace('℃', '')) for result in results]
# 绘制折线图
line = (
Line()
.add_xaxis(x_data)
.add_yaxis('最高温度', y_data)
.set_global_opts(title_opts=opts.TitleOpts(title='天气数据可视化'))
.render_embed()
)
# 关闭游标和连接
cursor.close()
conn.close()
return render_template('visualize.html', line=line)
if __name__ == '__main__':
app.run(debug=True)
```
最后在visualize.html中嵌入可视化结果:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数据可视化</title>
</head>
<body>
<h1>天气数据可视化</h1>
<div id="line" style="width:800px;height:500px;"></div>
{{ line|safe }}
</body>
</html>
```
5. VSCode部分
将以上代码保存到一个.py文件中,然后在VSCode中打开该文件夹,按下Ctrl+Shift+`打开终端,输入以下命令来安装所需的Python包:
```
pip install requests beautifulsoup4 pymysql pyecharts flask
```
然后在终端中输入以下命令来运行Flask应用程序:
```
python app.py
```
在浏览器中访问http://localhost:5000/即可看到网页。