词云图之《战狼2》影评

下午看了社区里的一篇文章《Python 爬虫实践:《战狼2》豆瓣影评分析》,感谢分享。
最近也是在学习爬虫,周末刚好看了词云图,这里就自己也来实现下。

周末的词云图介绍《word_cloud-用Python之作个性化词云图

豆瓣影评页面分析

我们到豆瓣电影模块,选择《战狼2》,找到下面的短评


页面地址:https://movie.douban.com/subject/26363254/comments?status=P

通过FireBug,观察页面,可以发现,评论信息还是很好拿的


然后,我们看看下一页数据是怎么获取的


这里是直接用参数传的,多点几次观察,就会发现规律


这里有个小疑问,他这个参数start,短评每页20条没有问题,但是这个start,并不是0,20,40开始的,会跳跃,不知道为啥,
而且,这个limit貌似是假的,我改成100都没用,还是显示20条
而且,不登录的话,并不能看完所有的短评,后面会报错,说没有权限。

#解析当前页面        
def parseCurrentPage(html):
    soup = BeautifulSoup(html, "html.parser")
    
    #获取评论信息
    p_comments = soup.select('div#comments div.comment p')

    p_lines=[]
    for com in p_comments:
        p_lines.append(com.contents[0].strip()+'\n')
    
    #获取下一页信息,可以通过这个获取数据
    p_next = soup.select_one('div#paginator a.next')
    #print(p_next)
    print(p_next['href'])
    
    return p_lines

生成词云图

这里的方法还是和周末的那一篇类似,这里多了一个stopwords的概念,就是剔除了一些没有用的词语,貌似网上可以找到通用的一些,我这里
直接根据测试,手动剔除的。
原文是自己使用pandas统计的词频,我这里直接就传给Wordcloud了,后面再试试

#指定需要提出的词语
        stopwords = {u'个',u'一个',u'这个',u'个人',u'不是',u'就是',u'一部',u'这部'
                     ,u'我们',u'所以',u'不会',u'这种',u'没有',u'各种',u'觉得'
                     ,u'真的',u'知道',u'还是',u'但是',u'可以',u'这么',u'因为',u'很多'}
        print('stopwords',stopwords)

实例代码

刚刚看了下导出的评论文件,发现有重复数据,一定是哪里有问题


刚试了下,这个影评的返回结果有毒啊

https://movie.douban.com/subject/26363254/comments?start=20&limit=20&sort=new_score&status=P
和
https://movie.douban.com/subject/26363254/comments?start=26&limit=20&sort=new_score&status=P
这2个显示的内容居然是一样的。。看来还是得通过每次下一页的href属性去获取下一页地址

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 22 16:13:24 2017

@author: yuguiyang
"""

import os
import urllib
from bs4 import BeautifulSoup
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

file_name = 'douban_movie_zhanlang.txt'

#根据URL,获取页面源码
def getHtml(url):
    req = urllib.request.Request(url)
    page = urllib.request.urlopen(req).read().decode('utf-8')
    
    return page

#删除文件
def clearFile(targetFile):
    if os.path.exists(targetFile):
        os.remove(targetFile)
    
#将数据保存到文件
def save2file(lines,targetFile):
    with open(targetFile,'a') as file:
        file.writelines(lines)

#解析当前页面        
def parseCurrentPage(html):
    soup = BeautifulSoup(html, "html.parser")
    
    #获取评论信息
    p_comments = soup.select('div#comments div.comment p')

    p_lines=[]
    for com in p_comments:
        p_lines.append(com.contents[0].strip()+'\n')
    
    #获取下一页信息,可以通过这个获取数据
    p_next = soup.select_one('div#paginator a.next')
    #print(p_next)
    print(p_next['href'])
    
    return p_lines
    
def showWordCloud(targetFile):
    #指定字体,是为了显示中文
    font = r'C:\Windows\Fonts\simsun.ttc'
    with open(targetFile) as file:
        comments = file.read()
        text_cut = jieba.cut(comments , cut_all=False)
        
        #指定需要提出的词语
        stopwords = {u'个',u'一个',u'这个',u'个人',u'不是',u'就是',u'一部',u'这部'
                     ,u'我们',u'所以',u'不会',u'这种',u'没有',u'各种',u'觉得'
                     ,u'真的',u'知道',u'还是',u'但是',u'可以',u'这么',u'因为',u'很多'}
        print('stopwords',stopwords)
        

        wordcloud = WordCloud(font_path=font,width=800,height=400,
                              background_color='white',stopwords=stopwords
                              ).generate(' '.join(text_cut))
        
        plt.imshow(wordcloud, interpolation='bilinear')
        plt.axis("off")
        
def main():   
    url = 'https://movie.douban.com/subject/26363254/comments?start={0}&limit=20&sort=new_score&status=P'
    
    clearFile(file_name)
    #直接遍历200条评论,这里要注意,超过多少页后,需要登录才可以,这里暂时还没有做,就到200
    for i in range(0,200,20):    
        print(url.format(i))
        html = getHtml(url.format(i))
        movie_comments = parseCurrentPage(html)
        save2file(movie_comments,file_name)
    
    #显示词云图
    showWordCloud(file_name)

if __name__=='__main__':
    main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,156评论 25 707
  • 罗素曾说:人的一生像一条河,开始是娟娟溪流,被狭窄的河岸所束缚;然后,它激烈地穿过巨石,冲越瀑布;渐渐地,河流变宽...
    芃芃女孩阅读 386评论 0 3
  • 1. 她是一个好姑娘。 虽然,我和她认识得不久。大概两年多吧。 她是我的同桌。 说起来认识她还是个偶然。那时候总看...
    杨汐言阅读 224评论 1 1
  • Difference between shallow copy and deep copy?1> 浅拷贝:指针(地...
    笔笔请求阅读 235评论 0 0
  • 1. 思想=>行为=>习惯=>性格=>命运 自己总结,网上也见,但没有点出本质:重复。没一个环节都是花时间的重复...
    活着活法阅读 208评论 0 0