parent
4bf39cc50a
commit
83fd9e0165
@ -0,0 +1,137 @@
|
|||||||
|
import urllib.request
|
||||||
|
from tkinter import messagebox
|
||||||
|
import mysql.connector
|
||||||
|
|
||||||
|
|
||||||
|
def connect_to_database():
|
||||||
|
try:
|
||||||
|
# 连接数据库
|
||||||
|
connection = mysql.connector.connect(
|
||||||
|
host="127.0.0.1",
|
||||||
|
user="root",
|
||||||
|
password="020425",
|
||||||
|
database="douban"
|
||||||
|
)
|
||||||
|
cursor = connection.cursor()
|
||||||
|
messagebox.showinfo("Success", "Connected to MySQL database successfully")
|
||||||
|
return connection, cursor
|
||||||
|
except Exception as e:
|
||||||
|
messagebox.showerror("Error", f"Error connecting to MySQL database: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
url = 'https://movie.douban.com/review/1627740/'
|
||||||
|
|
||||||
|
|
||||||
|
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-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
||||||
|
"Cache-Control": "max-age=0",
|
||||||
|
"Connection": "keep-alive",
|
||||||
|
"Cookie": 'll="118276"; bid=aRJ3WyvegZU; viewed="26979890"; ap_v=0,6.0',
|
||||||
|
"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-Mobile": "?0",
|
||||||
|
"Sec-Ch-Ua-Platform": '"Windows"',
|
||||||
|
"Sec-Fetch-Dest": "document",
|
||||||
|
"Sec-Fetch-Mode": "navigate",
|
||||||
|
"Sec-Fetch-Site": "same-origin",
|
||||||
|
"Sec-Fetch-User": "?1",
|
||||||
|
"Upgrade-Insecure-Requests": "1",
|
||||||
|
"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) 请求对象的定制
|
||||||
|
request = urllib.request.Request(url, headers=headers)
|
||||||
|
|
||||||
|
# (2)获取响应的数据
|
||||||
|
response = urllib.request.urlopen(request)
|
||||||
|
content = response.read().decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
# 和上面的代码一样
|
||||||
|
with open('电影评论.html', 'w', encoding='utf-8') as fp:
|
||||||
|
fp.write(content)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
soup = BeautifulSoup(open('电影评论.html',encoding='utf-8'),'lxml')
|
||||||
|
|
||||||
|
# 获取节点内容
|
||||||
|
|
||||||
|
tags_with_class = soup.find_all(class_='review-content clearfix')
|
||||||
|
|
||||||
|
text_list = []
|
||||||
|
|
||||||
|
# 遍历结果集中的每个标签对象,并获取其文本内容
|
||||||
|
for tag in tags_with_class:
|
||||||
|
text_list.append(tag.text)
|
||||||
|
|
||||||
|
# 将列表转换为字符串
|
||||||
|
result_text = '\n'.join(text_list)
|
||||||
|
|
||||||
|
# 打印文本内容
|
||||||
|
print(result_text)
|
||||||
|
|
||||||
|
|
||||||
|
with open('评论.txt', 'w', encoding='utf-8') as fp:
|
||||||
|
fp.write(result_text)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import jieba
|
||||||
|
import numpy
|
||||||
|
from PIL import Image
|
||||||
|
from wordcloud import WordCloud
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
txt = open("../CommentRequest//评论.txt", "r", encoding='utf-8').read()
|
||||||
|
words = " ".join(list(jieba.cut(txt)))
|
||||||
|
|
||||||
|
counts = {}
|
||||||
|
|
||||||
|
# 停用词表设置
|
||||||
|
stopwords = [i.strip() for i in open("../Text/stopwords.txt", encoding='utf-8').readlines()]
|
||||||
|
|
||||||
|
for word in words:
|
||||||
|
if len(word) == 1:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
# 遍历所有词语,每出现一次其对应的值加 1
|
||||||
|
counts[word] = counts.get(word, 0) + 1
|
||||||
|
|
||||||
|
items = list(counts.items())
|
||||||
|
# 根据词语出现的次数进行从大到小排序
|
||||||
|
items.sort(key=lambda x: x[1], reverse=True)
|
||||||
|
|
||||||
|
mask = numpy.array(Image.open("../image/bg2.png"))
|
||||||
|
wordcloud = WordCloud(font_path='../image/SimHei.ttf',
|
||||||
|
width=800,
|
||||||
|
height=400,
|
||||||
|
background_color='white',
|
||||||
|
mode='RGBA',
|
||||||
|
max_words=150,
|
||||||
|
stopwords=stopwords,
|
||||||
|
# mask=mask
|
||||||
|
).generate(words)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 显示词云图
|
||||||
|
plt.figure(figsize=(10, 5))
|
||||||
|
plt.imshow(wordcloud, interpolation='bilinear')
|
||||||
|
plt.title('', fontproperties='SimHei')
|
||||||
|
plt.axis('off') # 不显示坐标轴
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# 保存词云图
|
||||||
|
wordcloud.to_file("../image/my_wordcloud.png")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue