python3.9版本下编程一个例子用tkinter设计系统界面,将所输入的网站进行数据爬取(例如标题与链接),并将所爬取到的内容存入数据库中,从数据库中读取数据进行处理,用matplotlib实现数据绘图
时间: 2024-02-06 17:12:43 浏览: 211
新闻网站爬虫,在课程设计与人合作完成的小项目,基于python3 scrapy,UI界面采用tkinter,,+源代码+文档说明
好的,以下是一个基于Python 3.9、tkinter、BeautifulSoup、sqlite3和matplotlib的例子,实现了从指定网站爬取标题和链接,并将其存储到sqlite3数据库中,最后使用matplotlib库实现数据绘图。请注意,此例子仅供参考,具体的实现可能因网站和需求不同而有所不同。
```python
import tkinter as tk
from tkinter import messagebox
import requests
from bs4 import BeautifulSoup
import sqlite3
import matplotlib.pyplot as plt
# 创建一个tkinter窗口
window = tk.Tk()
window.geometry('400x300')
window.title('网站数据爬取和绘图系统')
# 创建标签和输入框
url_label = tk.Label(window, text='请输入网站URL:', font=('Arial', 12))
url_label.pack()
url_entry = tk.Entry(window, font=('Arial', 12))
url_entry.pack()
# 创建按钮和事件处理程序
def crawl_data():
# 获取用户输入的网站URL
url = url_entry.get()
if not url:
messagebox.showerror('错误', '请输入网站URL!')
return
try:
# 发送GET请求,获取网站内容
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
# 解析HTML内容,获取标题和链接
soup = BeautifulSoup(html, 'html.parser')
titles = [title.text for title in soup.find_all('a')]
links = [link.get('href') for link in soup.find_all('a')]
# 将标题和链接存储到sqlite3数据库中
conn = sqlite3.connect('data.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS website_data (title text, link text)')
for i in range(len(titles)):
c.execute('INSERT INTO website_data VALUES (?, ?)', (titles[i], links[i]))
conn.commit()
conn.close()
messagebox.showinfo('提示', '成功爬取数据并存储到数据库!')
except:
messagebox.showerror('错误', '爬取数据失败!')
def plot_data():
try:
# 从sqlite3数据库中读取数据,并进行处理
conn = sqlite3.connect('data.db')
c = conn.cursor()
data = c.execute('SELECT * FROM website_data').fetchall()
conn.close()
# 统计标题出现的次数
title_counts = {}
for item in data:
title = item[0]
if title in title_counts:
title_counts[title] += 1
else:
title_counts[title] = 1
# 绘制柱状图
plt.bar(range(len(title_counts)), list(title_counts.values()), align='center')
plt.xticks(range(len(title_counts)), list(title_counts.keys()), rotation=90)
plt.ylabel('标题出现次数')
plt.title('网站数据统计')
plt.show()
except:
messagebox.showerror('错误', '绘制数据图表失败!')
crawl_button = tk.Button(window, text='爬取数据', font=('Arial', 12), command=crawl_data)
crawl_button.pack()
plot_button = tk.Button(window, text='绘制数据图表', font=('Arial', 12), command=plot_data)
plot_button.pack()
# 启动窗口
window.mainloop()
```
在这个例子中,我们首先创建了一个tkinter窗口,并添加了一个标签和一个输入框,用于让用户输入要爬取的网站URL。然后,我们创建了两个按钮,分别用于爬取数据和绘制数据图表。
在按钮的事件处理程序中,我们首先获取用户输入的网站URL,并发送GET请求,获取网站内容。然后,我们使用BeautifulSoup库解析HTML内容,获取标题和链接,并将其存储到sqlite3数据库中。
在绘制数据图表时,我们首先从sqlite3数据库中读取数据,并进行处理。在这个例子中,我们使用一个字典来统计每个标题出现的次数,并使用matplotlib库绘制了一个柱状图。
最后,我们启动了tkinter窗口,让用户输入网站URL,并可以通过按钮来爬取数据和绘制数据图表。
希望这个例子对你有所帮助!
阅读全文