Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

一、项目背景

电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面,了解一部电影的方法是通过已经观看完电影的人群的反馈,虽然电影评分和大众推荐度在一定程度上是观影人群的反馈,但是并没有电影评论的反馈真实。评论对影视剧的好坏与特色可以更加充分的体现。所以了解一部影视作品的最好方式是通过评论。出于对评论的大量且参差不齐的考虑,通过出现的高频词来分析,是通过评论了解影视剧较为便捷的方式。将高频词整合,通过词云图是极好的方式。所以项目基于以上背景决定基于网络爬虫获取豆瓣评论生成词云图实现指定电影豆瓣评论关键词词云生成器。

二、项目的详细设计

  • 生成器的主要结构为,爬虫模块、词云生成模块、GUI界面模块。
  • 主要流程为在GUI输入电影名称后,将参数传给爬虫模块,具体通过get方式将电影名称封装成url发送至豆瓣服务器进入搜索界面获取指定电影URL中指定的id,将获取的id再次封装成url发送至豆瓣服务器进入评论网页,通过爬虫爬取评论数据存至本地生成文本格式。生成本地文本后,程序将调用词云模块对生成的文本提取,并进行符号删除并且删去停用词。并定位背景图以及设置图片词语参数生成词云图返回。
  • 考虑到人工收集影评较为复杂且工作量繁重,故通过网络爬虫实现对指定豆瓣评论的爬取。爬取对象为豆瓣影评取,且需要考虑输入电影名字爬取指定的功能,所以选用的库函数有:requests、urllib.request、Beautifulsoup、用于爬取评论数据及获取。将电影名称封装url发送后,进入搜索界面,使用Xpath定位HTML代码中的搜索结果的第一项中的sid。
  • 将获取到的的id构造url发送给豆瓣服务器,访问评论网页。进入网站后,调用定义函数getComment()对评论进行爬取,并保存至本地文本中。
    后续通过词云处理后生成词云图展示。

爬虫模块

  • 以上为爬虫工作所有需要调用的包
import urllib.request
import requests, re
from bs4 import BeautifulSoup
  • 获取HTML源码
def getHtml(url):"""获取url页面"""headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}req = urllib.request.Request(url,headers=headers)req = urllib.request.urlopen(req)content = req.read().decode('utf-8')return content
  • 这部分代码用于将获取后的HTML源码处理并提取出指定内容。
def getComment(url):"""解析HTML页面"""html = getHtml(url)soupComment = BeautifulSoup(html, 'html.parser')comments = soupComment.findAll('span', 'short')onePageComments = []for comment in comments:# print(comment.getText()+'\n')onePageComments.append(comment.getText()+'\n')return onePageComments
  • 在搜索页面内定位第一个展示的电影对应的sid(即为豆瓣网里每一部电影唯一的id)
def getid(name):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',}movie_name = nameparams = {"q": movie_name}search_url = "https://www.douban.com/search"r = requests.get(search_url, params=params, headers=headers)soup = BeautifulSoup(r.content, 'lxml')first_movie_info = soup.find('a', {'class': 'nbg'})['onclick']pattern = re.compile('\d{4,}')sid = str(pattern.search(first_movie_info).group())return(sid)
  • 将上一个函数返回的结果进行评论提取并存入txt文本
def get_data():with open('电影评论.txt', 'w', encoding='utf-8') as f:sid=getid(_input.get())for page in range(10):  # 豆瓣爬取多页评论需要验证。url = 'https://movie.douban.com/subject/'+sid+'/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'for i in getComment(url):f.write(i)

GUI模块

  • GUI模块调用的库
from tkinter import *
import matplotlib.pyplot as plt
app = Tk()#主窗口
_input = Entry()#输入框
_input.pack()
app.title("电影评论关键词生成器")
screenwidth = app.winfo_screenwidth()#定义窗口宽度
screenheight = app.winfo_screenheight()#定义窗口高度
dialog_width = 400
dialog_height = 170
# 前两个参数是窗口的大小,后面两个参数是窗口的位置
app.geometry("%dx%d+%d+%d" % (dialog_width, dialog_height, (screenwidth - dialog_width) / 2, (screenheight - dialog_height) / 2))#设置窗口局中分布
btn = Button(text='查询', command=get_data,width=10)#定义按钮,按钮的结果是调用get data函数进入爬虫模块
btn.place(x=155, y=80)#定义按钮位置
btn.pack()
app.mainloop()

词云模块

  • 词云模块调用的库
from wordcloud import WordCloud
import pandas as pd
from imageio import imread
import jieba
with open("电影评论.txt", "r", encoding='UTF-8') as fin1:all_words = cut_words(fin1)#读取文本#定义停用词stop = ['的','你','了','将','为','例',' ','多','再','有','是','等','天','次','让','在','我','也','就','这样','啊','和','都','《','》',',','看','!','什么','怎么','这么','很','给','没有','不是','说','不','吗','?','!' ,'?','。' ,'...' ,'电影','主','男','女'   ]words_cut = []#定义停用词for word in all_words:if word not in stop:words_cut.append(word)word_count = pd.Series(words_cut).value_counts()back_ground = imread("F:\\flower.jpg")#自己定义图片位置wc = WordCloud(font_path="C:\\Windows\\Fonts\\simhei.ttf", #设置字体background_color="white",  #设置词云背景颜色max_words=400,  #词云允许最大词汇数mask=back_ground,  #词云形状max_font_size=400,   #最大字体大小random_state=90  #配色方案的种数)wc1 = wc.fit_words(word_count)  #生成词云plt.figure()plt.imshow(wc1)plt.axis("off")plt.show()wc.to_file("ciyun.png")

三、项目的分析与测试

界面如下:
输入电影名称(采用《八佰》作为示例)


返回结果:

结果分析:
成功将豆瓣社区中《八佰》的评论区出现的高频次进行生成词云图并返回。

全部代码

from tkinter import *
import urllib.request
import requests, re
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import pandas as pd
from imageio import imread
import matplotlib.pyplot as plt
import jieba
def getHtml(url):"""获取url页面"""headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}req = urllib.request.Request(url,headers=headers)req = urllib.request.urlopen(req)content = req.read().decode('utf-8')return content
def cut_words(top_search):top_cut=[]for top in top_search:top_cut.extend(list(jieba.cut(top)))  #使用精确模式切割词汇return top_cut
def getComment(url):"""解析HTML页面"""html = getHtml(url)soupComment = BeautifulSoup(html, 'html.parser')comments = soupComment.findAll('span', 'short')onePageComments = []for comment in comments:# print(comment.getText()+'\n')onePageComments.append(comment.getText()+'\n')return onePageComments
def getid(name):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',}movie_name = nameparams = {"q": movie_name}search_url = "https://www.douban.com/search"r = requests.get(search_url, params=params, headers=headers)soup = BeautifulSoup(r.content, 'lxml')first_movie_info = soup.find('a', {'class': 'nbg'})['onclick']pattern = re.compile('\d{4,}')sid = str(pattern.search(first_movie_info).group())return(sid)
def get_data():with open('电影评论.txt', 'w', encoding='utf-8') as f:sid=getid(_input.get())for page in range(10):  # 豆瓣爬取多页评论需要验证。url = 'https://movie.douban.com/subject/'+sid+'/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'for i in getComment(url):f.write(i)with open("电影评论.txt", "r", encoding='UTF-8') as fin1:all_words = cut_words(fin1)#定义停用词stop = ['的','你','了','将','为','例',' ','多','再','有','是','等','天','次','让','在','我','也','就','这样','啊','和','都','《','》',',','看','!','什么','怎么','这么','很','给','没有','不是','说','不','吗','?','!' ,'?','。' ,'...' ,'电影','主','男','女'   ]words_cut = []for word in all_words:if word not in stop:words_cut.append(word)word_count = pd.Series(words_cut).value_counts()back_ground = imread("F:\\flower.jpg")wc = WordCloud(font_path="C:\\Windows\\Fonts\\simhei.ttf", #设置字体background_color="white",  #设置词云背景颜色max_words=400,  #词云允许最大词汇数mask=back_ground,  #词云形状max_font_size=400,   #最大字体大小random_state=90  #配色方案的种数)wc1 = wc.fit_words(word_count)  #生成词云plt.figure()plt.imshow(wc1)plt.axis("off")plt.show()wc.to_file("ciyun.png")print('succeed!\n')
app = Tk()
_input = Entry()
#_input.place(x=113, y=80)
_input.pack()
app.title("电影评论关键词生成器")
screenwidth = app.winfo_screenwidth()
screenheight = app.winfo_screenheight()
dialog_width = 400
dialog_height = 170
# 前两个参数是窗口的大小,后面两个参数是窗口的位置
app.geometry("%dx%d+%d+%d" % (dialog_width, dialog_height, (screenwidth - dialog_width) / 2, (screenheight - dialog_height) / 2))
btn = Button(text='查询', command=get_data,width=10)
btn.place(x=155, y=80)
btn.pack()
app.mainloop()

END
学业繁重,好久没更新,后续寒假可能会更新,一起加油

Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序相关推荐

  1. Python实现输入电影名字自动生成豆瓣评论词云图!

    一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面,了解一部电影的方法是通过已经观看完电影的人群的反馈,虽然电影评分和大众推荐 ...

  2. python实现输入三角形边长自动作图求面积案例

    三角形是个好东西,比如知道三条边边长,可以判断能不能组成三角形(两边之和大于第三边),如果可以就进一步计算其面积(海伦公式),最后还能把这个三角形画出来(余弦定理求角度),所以说这个作为一个编程题目用 ...

  3. 算法:五笔编码,如何根据输入的词条自动生成输入编码

    算法:五笔编码,如何根据输入的词条自动生成输入编码 一.想要实现的 最近做的一个五笔码表工具,想要实现根据用户输入的词条自动生成输入编码. 比如: 输入 我们 生成 trwu 输入 五笔基础知识 生成 ...

  4. Python爬虫-猫眼电影《冰雪奇缘2》评论数据的可视化分析

    [TPython爬虫-猫眼电影<冰雪奇缘2>评论数据的可视化分析 项目简介 爬虫,称为网页蜘蛛或网络机器人,用于自动获取互联网上的信息.我通过python爬虫来爬取猫眼电影的评论,对最新热 ...

  5. python实现的、带GUI界面电影票房数据可视化程序

    代码地址如下: http://www.demodashi.com/demo/14588.html ##详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从 ...

  6. python爬取网易云音乐生成王力宏歌曲词云

    python爬取网易云音乐生成王力宏歌曲词云 # -*- coding:utf-8 -*- # 网易云音乐,通过歌手id生成词云 import requests import sys,re,os fr ...

  7. Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果)

    Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果) 导读 设计自 ...

  8. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  9. python黑科技自动p图_自动P图神器来了,这些逆天小程序!

    原标题:自动P图神器来了,这些逆天小程序! 现在的照片, 不P一下,都不好意思发朋友圈! P图软件五花八门,安装又很占空间, 爱P图的小伙伴们, 不妨试试即用即走的小程序. 今天,小编就从几百种小程序 ...

最新文章

  1. dedecms部分文章出现读取附加信息出错的解决办法
  2. 【OpenCV入门指南】第十三篇 人脸检测
  3. CVPR2021 | MIMO-VRN 用于视频缩放任务的联合训练策略
  4. 【Flink】Flink 1.12.2 TaskSlotTable
  5. 【Vue2.0】—github小案例(二十三)
  6. 每天CookBook之Python-047
  7. JVM——类加载机制(二)
  8. vue-cli 做前端+ nodejs做服务端的 IIS部署
  9. 2021-08-30缺失的第一个正数
  10. python pytorch tenser 索引 slice 切片
  11. 少儿编程家长疑问解答
  12. viper12a电源电路图_viper12a引脚功能图与引脚电压
  13. radio后台数据回显
  14. 发票:企业级发票服务开放平台
  15. 搜索及代码在GitHub上查重小技巧
  16. jQuery第5章上机练习3(使用jQuery变换网页效果)
  17. python怎么样自动生成证件照
  18. CoreIDRAW导出PDF文件时出现部分内容不显示、空白的问题解决方法。
  19. 大数据学习路线图(转载)
  20. cf_332b - Maximum Absurdity

热门文章

  1. 【Hash应用问题】例3.1 统计同成绩学生人数
  2. HanLP自定义词典注意事项
  3. 使用免费ip代理进行投票
  4. 贪吃蛇大作战游戏攻略
  5. 东大OJ-最大子序列问题的变形
  6. 树莓派入门教程 - 0 - 准备篇 - 0.2 树莓派SSH远程登陆,VNC远程桌面
  7. libtorch下tensor与img的互相转换
  8. 模版 ----- 一维指数型枚举 排列型枚举 组合型枚举
  9. 【机房收费系统】---组合查询
  10. 推荐几家域名注册服务商 附个人意见