本文主要是介绍用python 做一个词云图:复仇者联盟4:终局之战。短评分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#短评网址
u1='https://movie.douban.com/subject/26100958/comments?start=40&limit=20&sort=new_score&status=P'
u1
输出结果为网址
#因为只有start的值不一样,所以我们可以采用格式化字符串%i来代替
u0='https://movie.douban.com/subject/26100958/comments?start=%i&limit=20&sort=new_score&status=P' %20
u0
#获取5个页面网址,并把它保存到一个列表中
url_lst=[]
for i in range(0,81,20):u0='https://movie.douban.com/subject/26100958/comments?start=%i&limit=20&sort=new_score&status=P' %iurl_lst.append(u0)
url_lst
输出结果为:为5个网址
#访问网页
import requests #访问的工具包
import pandas as pd
from bs4 import BeautifulSoup #解析的工具包
u1=url_lst[0]#提取第一个网址
#返回response[200]代表向网页请求成功
r=requests.get(u1)
r
输出结果为:
<Response [200]>
#解析网页,会显示网页所有代码,我们就可以解析它的标签
soup=BeautifulSoup(r.text,'lxml')
#例如我要去找到复仇者联盟4:终极之战短评这几个字,是h1的标签
soup.h1
输出结果为:
复仇者联盟4:终局之战 短评
#看过(221799)
soup.find('li',class_='is-active')
输出结果为:
- 看过(221812)
#所有的评论在这个大的div下面 div=soup.find('div',id='comments') div
#构建获取页面URL的函数 def get_urls(n):urllst=[]for i in range(n):urllst.append('https://movie.douban.com/subject/26100958/comments?start=%i&limit=20&sort=new_score&status=P' %(i*20))return urllst urllsts=get_urls(50) urllsts[:2]
输出结果为:前两个页面的网址
# 构建网页信息获取函数def get_data(urli):try:ri = requests.get(url = u)ri.encoding = 'utf-8'# 访问网页soupi = BeautifulSoup(ri.text)# 解析网页infor_lst = soupi.find('div',id="comments").find_all('div',class_="comment-item")# 获取所有招聘标签divdatalsti = []for infor in infor_lst[:]:dic = {}dic['评论者'] = infor.find('span',class_="comment-info").find('a').textdic['评分'] = int(infor.find('span',class_="comment-info").find_all('span')[1]['class'][0][-2:])dic['评论时间'] = infor.find('span',class_="comment-time").text.replace(' ','').replace('\n','')dic['有用数量'] = int(infor.find('span',class_="votes").text)dic['评论内容'] = infor.find('p').text.replace('\n','')datalsti.append(dic)return datalstiexcept:return []u = 'https://movie.douban.com/subject/26100958/comments?start=0&limit=20&sort=new_score&status=P' get_data(u)[:2]
输出结果为:
df=pd.DataFrame(datalst) df.head()
#数据分布分析 #评论字数的分析 df['评论字数']=df['评论内容'].str.len() df
import matplotlib.pyplot as plt %matplotlib inline df['评论字数'] = df['评论内容'].str.len() plt.figure(figsize = (12,5)) plt.title('评论字数数据分布') df['评论字数'].hist(bins = 20,edgecolor = 'white') plt.grid(linestyle='--')
#评论数量与有用数量的关系,用散点图来表示 plt.figure(figsize = (12,5)) plt.title('评论时间与有用数量关系') plt.scatter(df['评论时间'],df['有用数量'],alpha = 0.4) plt.xlabel('评论时间') plt.ylabel('有用数量') plt.grid(linestyle='--')
#关键人物的分析 keyword='灭霸' n=0 for i in df['评论内容']:if keyword in i:n=n+1 print(n)
#用DataFrame实现 len(df[df['评论内容'].str.contains('灭霸')])
#定义一个函数,去输出不同的人物在评论中出现的次数 def name_count1(namei):return len((df[df['评论内容'].str.contains(namei)])) print('函数构建成功!')
name_count1('美队')
#词频的出现次数 namelst=['美队','钢铁侠','灭霸','雷神','浩克','惊奇队长','奇异博士','死'] for i in namelst:print(i,name_count1(i))
输出结果为:
美队 13
钢铁侠 17
灭霸 10
雷神 13
浩克 2
惊奇队长 10
奇异博士 3
死 22
最后做成词云图
这篇关于用python 做一个词云图:复仇者联盟4:终局之战。短评分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!