jinzhudada 6 months ago
parent f48ff6c362
commit 777d875456

@ -1,6 +1,5 @@
from tkinter import * from tkinter import *
import main
import mysql
user_login = {'aaa':'123456','bbb':'123321','ccc':'345543'} user_login = {'aaa':'123456','bbb':'123321','ccc':'345543'}
count = 0 count = 0
@ -13,7 +12,7 @@ def login():
password = entry_password.get() password = entry_password.get()
if (password==user_login[username]): if (password==user_login[username]):
Label_message.config(text='登录成功') Label_message.config(text='登录成功')
mysql.query_database() main.show_data_window()
else: else:
Label_message.config(text='密码错误!还可以尝试{}'.format(2-count)) Label_message.config(text='密码错误!还可以尝试{}'.format(2-count))
count += 1 count += 1

@ -2,14 +2,15 @@ import requests
import re import re
import tkinter as tk import tkinter as tk
from tkinter import Toplevel from tkinter import Toplevel
import mysql
headers = { headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/11" "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/11"
} }
def show_data_window(): def show_data_window():
def fetch_data(): def fetch_data():
urls = [f"https://www.gushiwen.cn/default_{i}.aspx" for i in range(1, 3)] urls = [f"https://www.gushiwen.cn/default_{i}.aspx" for i in range(1, 5)]
gushici = [] gushici = []
for url in urls: for url in urls:
response = requests.get(url, headers=headers) response = requests.get(url, headers=headers)
@ -23,29 +24,26 @@ def show_data_window():
for title, author, dynasty, poetic in zip(titles, authors, dynastys, new_poetics): for title, author, dynasty, poetic in zip(titles, authors, dynastys, new_poetics):
gushici.append({"title": title, "author": author, "dynasty": dynasty, "poetic": poetic}) gushici.append({"title": title, "author": author, "dynasty": dynasty, "poetic": poetic})
# 保存到TXT文件
with open("gushi.txt", "w", encoding="utf-8") as file: with open("gushi.txt", "w", encoding="utf-8") as file:
for item in gushici: for item in gushici:
file.write(f"标题: {item['title']}, 作者: {item['author']}, 朝代: {item['dynasty']}, 内容: {item['poetic']}\n") file.write(f"标题: {item['title']}, 作者: {item['author']}, 朝代: {item['dynasty']}, 内容: {item['poetic']}\n")
# 在新窗口显示数据 # 在新窗口显示数据
show_data_window(gushici) show_data_window(gushici)
def show_data_window(data): def show_data_window(data):
window = Toplevel(root) window = Toplevel(root)
window.title("古诗词信息") window.title("古诗词信息")
text_widget = tk.Text(window) text_widget = tk.Text(window)
text_widget.pack(expand=True, fill='both') text_widget.pack(expand=True, fill='both')
for item in data[:20]: # 仅显示前10条数据作为示例 for item in data[:10]: # 仅显示前10条数据作为示例
text_widget.insert(tk.END, f"标题: {item['title']}\n作者: {item['author']}\n朝代: {item['dynasty']}\n内容: {item['poetic']}\n\n") text_widget.insert(tk.END, f"标题: {item['title']}\n作者: {item['author']}\n朝代: {item['dynasty']}\n内容: {item['poetic']}\n\n")
window.mainloop() window.mainloop()
def start_mysql():
mysql.start_mysql_process()
root = tk.Tk() root = tk.Tk()
root.title("古诗词爬虫") root.title("古诗词爬虫")
@ -53,6 +51,5 @@ def show_data_window():
fetch_button = tk.Button(root, text="开始爬取", command=fetch_data) fetch_button = tk.Button(root, text="开始爬取", command=fetch_data)
fetch_button.pack(pady=20) fetch_button.pack(pady=20)
mysql_button = tk.Button(root, text="跳转到mysql.py", command=start_mysql) root.mainloop()
mysql_button.pack(pady=10) # 在"开始爬取"按钮下面添加新按钮
root.mainloop()

@ -1,20 +1,24 @@
import pymysql import pymysql
from tkinter import Tk, messagebox
def query_database(): def start_mysql_process():
config = { config = {
'host': 'localhost', 'host': 'localhost',
'port': 3306, 'port': 3306,
'user': 'root', 'user': 'root',
'password': '123321', 'password': '123321',
'db': 'gushici', 'db': 'gushici',
'charset': 'utf8mb4', 'charset': 'utf8mb4',
} }
try: try:
# 创建连接 # 创建连接
connection = pymysql.connect(**config) connection = pymysql.connect(**config)
print("数据库连接成功") print("数据库连接成功")
# 显示连接成功的消息框
show_success_popup()
# 创建游标用于执行SQL命令 # 创建游标用于执行SQL命令
with connection.cursor() as cursor: with connection.cursor() as cursor:
# 执行一个查询示例 # 执行一个查询示例
@ -25,11 +29,23 @@ def query_database():
for row in result: for row in result:
print(row) print(row)
# 自动提交事务,对于只读操作这不是必需的,但确保任何更改会生效 # 对于只读操作commit不是必需的但保持原样以确保其他类型操作的完整性
connection.commit() connection.commit()
except pymysql.MySQLError as e: except pymysql.MySQLError as e:
print(f"数据库查询过程中发生错误: {e}") print(f"数据库查询过程中发生错误: {e}")
finally: finally:
# 连接关闭已经在with语句中自动完成这里不需要额外判断 # 连接关闭已经在with语句中自动完成这里不需要额外处理
pass pass
def show_success_popup():
"""显示数据库连接成功的消息框"""
root = Tk()
root.withdraw() # 隐藏主窗口,只显示消息框
messagebox.showinfo("连接状态", "数据库连接成功!")
root.destroy() # 销毁窗口对象,结束进程
start_mysql_process()

@ -0,0 +1,123 @@
import tkinter as tk
from tkinter import messagebox
import requests
import re
from tkinter import Toplevel
import pymysql
from tkinter import Tk
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/11"
}
def start_mysql_process():
config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123321',
'db': 'gushici',
'charset': 'utf8mb4',
}
try:
# 创建连接
connection = pymysql.connect(**config)
print("数据库连接成功")
# 显示连接成功的消息框
show_success_popup()
# 创建游标用于执行SQL命令
with connection.cursor() as cursor:
# 执行一个查询示例
cursor.execute("SELECT * FROM poems LIMIT 5")
# 获取查询结果
result = cursor.fetchall()
for row in result:
print(row)
# 对于只读操作commit不是必需的但保持原样以确保其他类型操作的完整性
connection.commit()
except pymysql.MySQLError as e:
print(f"数据库查询过程中发生错误: {e}")
finally:
# 连接关闭已经在with语句中自动完成这里不需要额外处理
pass
def show_success_popup():
"""显示数据库连接成功的消息框"""
root = Tk()
root.withdraw() # 隐藏主窗口,只显示消息框
messagebox.showinfo("连接状态", "数据库连接成功!")
root.destroy() # 销毁窗口对象,结束进程
def fetch_data():
urls = [f"https://www.gushiwen.cn/default_{i}.aspx" for i in range(1, 4)]
gushici = []
for url in urls:
response = requests.get(url, headers=headers)
content = response.text
titles = re.findall('<b>(.*?)</b>', content, re.DOTALL)
authors = re.findall('<p class="source">.*?<a.*?<a.*?>(.*?)</a>', content, re.DOTALL)
dynastys = re.findall('<p class="source">.*?<a.*?<a.*?>(.*?)</a>', content, re.DOTALL)
poetics = re.findall('<div class="contson.*?">(.*?)</div>', content, re.DOTALL)
new_poetics = [''.join(re.split('<.*?>|<.*? />', p)).strip() for p in poetics]
for title, author, dynasty, poetic in zip(titles, authors, dynastys, new_poetics):
gushici.append({"title": title, "author": author, "dynasty": dynasty, "poetic": poetic})
with open("sci.txt", "w", encoding="utf-8") as file:
for item in gushici:
file.write(f"标题: {item['title']}, 作者: {item['author']}, 朝代: {item['dynasty']}, 内容: {item['poetic']}\n")
windon_ck(gushici)
def windon_ck(data):
window = Toplevel(app)
window.title("古诗词信息")
text_widget = tk.Text(window)
text_widget.pack(expand=True, fill='both')
for item in data[:10]: # 仅显示前10条数据作为示例
text_widget.insert(tk.END, f"标题: {item['title']}\n作者: {item['author']}\n朝代: {item['dynasty']}\n内容: {item['poetic']}\n\n")
window.mainloop()
def login():
entered_username = username_entry.get()
entered_password = password_entry.get()
if entered_username == "aaa" and entered_password == "123456":
messagebox.showinfo("登录成功", "欢迎回来!")
fetch_data()
start_mysql_process() and show_success_popup()
else:
messagebox.showerror("登录失败", "账号或密码错误,请重试。")
# 创建主窗口
app = tk.Tk()
app.title("登录界面")
# 设置窗口大小
app.geometry("300x150")
# 创建标签和输入框
username_label = tk.Label(app, text="用户名:")
username_label.pack()
username_entry = tk.Entry(app)
username_entry.pack()
password_label = tk.Label(app, text="密码:")
password_label.pack()
password_entry = tk.Entry(app, show="*") # 密码显示为星号
password_entry.pack()
# 创建登录按钮
login_button = tk.Button(app, text="登录", command=login)
login_button.pack()
# 运行应用程序的主循环
app.mainloop()

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save