commit_0531

main
dqs2956213868 1 year ago
parent 83fd9e0165
commit 86932401c2

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

@ -1,10 +1,9 @@
import urllib.request import urllib.request
from tkinter import messagebox import tkinter as tk
import tkinter.messagebox
from PIL import Image, ImageTk
import mysql.connector import mysql.connector
def connect_to_database():
try:
# 连接数据库 # 连接数据库
connection = mysql.connector.connect( connection = mysql.connector.connect(
host="127.0.0.1", host="127.0.0.1",
@ -12,17 +11,52 @@ def connect_to_database():
password="020425", password="020425",
database="douban" database="douban"
) )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = connection.cursor() cursor = connection.cursor()
messagebox.showinfo("Success", "Connected to MySQL database successfully") # s='三大队'
return connection, cursor
except Exception as e: # 创建窗口
messagebox.showerror("Error", f"Error connecting to MySQL database: {e}") window = tk.Tk()
window.title("豆瓣电影评论数据可视化")
window.geometry("450x300")
# welcome to image
canvas = tk.Canvas(window, height=200, width=500)
image_file = tk.PhotoImage(file="../image/img.png")
image = canvas.create_image(0, 0, anchor='nw', image=image_file)
canvas.pack(side='top')
# 电影名
tk.Label(window, text="电影名").place(x=100, y=230)
url = 'https://movie.douban.com/review/1627740/' # 输入框 提示
var_search = tk.StringVar()
var_search.set("哈尔的移动城堡")
# 搜索的电影
entry_search = tk.Entry(window, textvariable=var_search)
entry_search.place(x=150,y=230)
def search_movie():
movie = entry_search.get()
if movie == "":
tk.messagebox.showwarning(title="错误", message="请输入电影名")
# 判断数据库里面是否有该电影的URL
else:
data=tuple()
# 获取输入框中的电影名
movie = entry_search.get()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("select url from douban01 where name=%s", (movie,))
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
if data != None:
url = data[0]
# url = 'https://movie.douban.com/review/15344422/'
# url = urls[0]
print(data[0])
headers = { headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
@ -30,7 +64,6 @@ headers = {
"Connection": "keep-alive", "Connection": "keep-alive",
"Cookie": 'll="118276"; bid=aRJ3WyvegZU; viewed="26979890"; ap_v=0,6.0', "Cookie": 'll="118276"; bid=aRJ3WyvegZU; viewed="26979890"; ap_v=0,6.0',
"Host": "movie.douban.com", "Host": "movie.douban.com",
"Referer": "https://movie.douban.com/subject/1308807/",
"Sec-Ch-Ua": '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"', "Sec-Ch-Ua": '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
"Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": '"Windows"', "Sec-Ch-Ua-Platform": '"Windows"',
@ -42,7 +75,6 @@ headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0" "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0"
} }
# (1) 请求对象的定制 # (1) 请求对象的定制
request = urllib.request.Request(url, headers=headers) request = urllib.request.Request(url, headers=headers)
@ -50,14 +82,10 @@ request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request) response = urllib.request.urlopen(request)
content = response.read().decode('utf-8') content = response.read().decode('utf-8')
# 和上面的代码一样 # 和上面的代码一样
with open('电影评论.html', 'w', encoding='utf-8') as fp: with open('电影评论.html', 'w', encoding='utf-8') as fp:
fp.write(content) fp.write(content)
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
soup = BeautifulSoup(open('电影评论.html', encoding='utf-8'), 'lxml') soup = BeautifulSoup(open('电影评论.html', encoding='utf-8'), 'lxml')
@ -76,21 +104,18 @@ for tag in tags_with_class:
result_text = '\n'.join(text_list) result_text = '\n'.join(text_list)
# 打印文本内容 # 打印文本内容
print(result_text) # print(result_text)
with open('评论.txt', 'w', encoding='utf-8') as fp: with open('评论.txt', 'w', encoding='utf-8') as fp:
fp.write(result_text) fp.write(result_text)
import jieba import jieba
import numpy import numpy
from PIL import Image from PIL import Image
from wordcloud import WordCloud from wordcloud import WordCloud
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
txt = open("../CommentRequest//评论.txt", "r", encoding='utf-8').read() txt = open("评论.txt", "r", encoding='utf-8').read()
words = " ".join(list(jieba.cut(txt))) words = " ".join(list(jieba.cut(txt)))
counts = {} counts = {}
@ -113,6 +138,7 @@ mask = numpy.array(Image.open("../image/bg2.png"))
wordcloud = WordCloud(font_path='../image/SimHei.ttf', wordcloud = WordCloud(font_path='../image/SimHei.ttf',
width=800, width=800,
height=400, height=400,
# mask=mask
background_color='white', background_color='white',
mode='RGBA', mode='RGBA',
max_words=150, max_words=150,
@ -120,18 +146,49 @@ wordcloud = WordCloud(font_path='../image/SimHei.ttf',
# mask=mask # mask=mask
).generate(words) ).generate(words)
# 显示词云图 # 显示词云图
plt.figure(figsize=(10, 5)) plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear') plt.imshow(wordcloud, interpolation='bilinear')
plt.title('', fontproperties='SimHei') plt.title('', fontproperties='SimHei')
plt.axis('off') # 不显示坐标轴 plt.axis('off') # 不显示坐标轴
plt.show() # plt.show()
# 保存词云图 # 保存词云图
wordcloud.to_file("../image/my_wordcloud.png") wordcloud.to_file("my_wordcloud.png")
# tk.messagebox.showinfo(title="搜索", message="你搜索了" + movie)
window_title = tk.Toplevel(window)
window_title.geometry("500x300")
window_title.title('' + movie + '' + "词云图")
# 加载图片
image = Image.open("my_wordcloud.png")
image_resized = image.resize((400, 280))
photo_image = ImageTk.PhotoImage(image=image_resized)
# 创建Canvas并添加图片
canvas = tk.Canvas(window_title, width=image_resized.width, height=image_resized.height)
canvas.pack()
# 在Canvas上创建一个image对象
image_id = canvas.create_image(0, 0, anchor='nw', image=photo_image)
# 确保图片不会被垃圾回收
canvas.image = photo_image
else:
tk.messagebox.showwarning(title="错误", message="没有找到该电影")
# 搜索框
bth_search = tk.Button(window, text="搜索", command=search_movie)
bth_search.place(x=310,y=225)
window.mainloop()
# 关闭数据库连接
connection.close()

@ -328,7 +328,7 @@
<link rel="stylesheet" href="https://img1.doubanio.com/f/zerkalo/3aeb281ab0e4f2c7050458684acfeb6838441de9/css/review/editor/ng/setting_standalone.css" /> <link rel="stylesheet" href="https://img1.doubanio.com/f/zerkalo/3aeb281ab0e4f2c7050458684acfeb6838441de9/css/review/editor/ng/setting_standalone.css" />
<div class="main-bd" id="review-1627740-content" <div class="main-bd" id="review-1627740-content"
data-ad-ext="有用9025 · 没用198"> data-ad-ext="有用9029 · 没用198">
@ -358,7 +358,7 @@
<div class="main-panel-useful" data-rid="1627740" data-is_owner="false" data-can_vote="true" data-is_tv="false"> <div class="main-panel-useful" data-rid="1627740" data-is_owner="false" data-can_vote="true" data-is_tv="false">
<button class="btn useful_count j a_show_login" data-rid="1627740"> <button class="btn useful_count j a_show_login" data-rid="1627740">
有用 9025 有用 9029
</button> </button>
<button class="btn useless_count j a_show_login" data-rid="1627740"> <button class="btn useless_count j a_show_login" data-rid="1627740">
没用 198 没用 198
@ -871,7 +871,7 @@ for(var i = 0, l = accounts.length; i < l; i++) {
<!-- dae-web-zerkalo--default-59f6ddfb95-crsjw--> <!-- dae-web-zerkalo--default-59f6ddfb95-kth7m-->
<script>_SPLITTEST=''</script> <script>_SPLITTEST=''</script>
</body> </body>

Loading…
Cancel
Save