麦田孤望者 发表于 2019-10-5 17:23

【python】写了个豆瓣电影短评词云生成

学python半年了
在吾爱白嫖挺久了
今天写了个程序
还没来得及做异常处理
有什么bug或可以优化的地方欢迎指出
谢谢各位!

上源码

import requests,re,os,time
import jieba.posseg as peg


from wordcloud import WordCloud

print('''
本程序源码发布在www.52pojie.cn上
原创作者:麦田孤望者 (UID: 910954)
转载请注明出处
''')
time.sleep(1)
os.system('cls')

movie_name_input = str(input('请输入电影名\n').encode('utf-8'))[:-1].replace('\\x','%')#将输入的电影名转换为utf-8编码并将\x替换为网址中的%

url = 'https://movie.douban.com/j/subject_suggest?q='+movie_name_input
res = requests.get(url)

index_list = []
movie_list = []
choice_list = res.json()

for index,i in enumerate(choice_list):#电影候选项
    print(index,i['title'],'年份:'+i['year'])
    index_list.append(index)
    movie_list.append(str(i['title']+' 年份:'+i['year']))

num_asw = input('请输入对应电影的序号   ---')

for i in index_list:
    if num_asw == str(i):
      print('您的选择是\n',movie_list)
      a = i#确定选择(用i的话出了循环i就是5)
      
movie_url = '/'.join(choice_list['url'].split('/')[:-1])

res = requests.get(movie_url)#短评页面
score_get = re.findall(re.compile('<div class="rating_self clearfix" typeof="v:Rating">(.*?)</div>\n<div class="ratings-on-weight">',re.S),res.text)#所有短评爬取

score = re.findall(re.compile('<strong class="ll rating_num" property="v:average">(.*?)</strong>',re.S),score_get)+'分'#评分
scored_people_num = re.findall(re.compile('<span property="v:votes">(.*?)人评价',re.S),score_get).replace('</span>','')+'人评价'#评分人数

print(score,scored_people_num)

def short_messege():#短评10页
    global movie_url
    global movie_list
    messege_list = []
    adj_list1=[]
    adj_list = []
    for x in range(10):#10页短评
      res = requests.get(movie_url+'/comments?start={}&limit=20&sort=new_score&status=P'.format(str(x*20)))
      messege_get = re.findall(re.compile('<div class="mod-bd" id="comments">(.*?)div class="aside"',re.S),res.text)
      for i in re.findall(re.compile('<span class="short">(.*?)</span>',re.S),messege_get):
            messege_list.append(i)
    os.system('cls')
   
    for i in messege_list:#每一句短评分词
      words=peg.cut(i)
      
      for word,flag in words:
            
            if flag == 'a':
                adj_list1.append(word)#提取形容词
            
   
    #去重
    for item in adj_list1:
      if item not in adj_list:
            adj_list.append(item)
   
    wordcloud=WordCloud(font_path="C:/Windows/Fonts/STXINWEI.TTF",
      background_color="white",width=600,
      height=300,max_words=500).generate(' '.join(adj_list1))#这里用的是没去重的形容词列表,生成词云图需要权重所以就用的没去重的
    #生成图片
    image=wordcloud.to_image()
    #显示图片
    image.show()
    wordcloud.to_file('《{}》影评词云图.png'.format(movie_list.split(' ')))
    print(' '.join(adj_list))#输出所有形容词(去重版本)
    input()#防止运行结束后窗口消失 需要用户有操作才会关闭此窗口
    #print(adj_list1)


short_messege()

#本来是想再弄个影评爬虫...但是...弄不动了...[笑cry]

如需运行,本程序用来requests,jieba和wordcloud三个第三方库,要运行请自行下载

anzong1313113 发表于 2019-10-5 17:32

谢谢分享

fergus1987 发表于 2019-10-5 17:44

随便学习源码 谢谢楼主分享!

卡卡113 发表于 2019-10-5 22:01

谢谢分享,期待更多更好的!加油!

流星下的梦 发表于 2019-10-18 19:10

请问版主,这个jieba库是什么库啊

麦田孤望者 发表于 2019-10-19 17:06

流星下的梦 发表于 2019-10-18 19:10
请问版主,这个jieba库是什么库啊

一个中文分词库,可以把一段文本切成一个个词汇,返回一个列表
页: [1]
查看完整版本: 【python】写了个豆瓣电影短评词云生成