zoukankan      html  css  js  c++  java
  • python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

    本文旨在提供爬取豆瓣电影《我不是药神》评论和词云展示的代码样例
    1、分析URL
    2、爬取前10页评论
    3、进行词云展示
    1、分析URL
    我不是药神 短评
    第一页url
    https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P
    第二页url
    https://movie.douban.com/subject/26752088/comments?start=20&limit=20&sort=new_score&status=P



    第十页url
    https://movie.douban.com/subject/26752088/comments?start=180&limit=20&sort=new_score&status=P
    分析发现每次变化的只是…strat=后面的数字,其他内容不变,可以以此遍历每一页的评论。
    2、爬取前10页评论
    代码:
    import urllib.request
    from bs4 import BeautifulSoup

    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 getComment(url):
        """解析HTML页面"""
        #html = getHtml(url)
        response = urllib.request.urlopen(url)
        html = response.read()
        html = html.decode('utf-8','ignore')
       soupComment = BeautifulSoup(html, 'html.parser')
    
        comments = soupComment.findAll('span', 'short')
        onePageComments = []
        for comment in comments:
            # print(comment.getText()+'
    ')
            onePageComments.append(comment.getText()+'
    ')
    
        return onePageComments
    
    
    if __name__ == '__main__':
        f = open('我不是药神page10.txt', 'w', encoding='utf-8') 
        for page in range(10): #爬取10页的评论
            url = 'https://movie.douban.com/subject/26752088/comments?start=' + str(20*page) + '&limit=20&sort=new_score&status=P'
            print('第%s页的评论:' % (page+1))
            print(url + '
    ')
            for i in getComment(url):
                f.write(i)
                print(i)
            print('
    ')
    

    ★★问题出现:
    (1)当IDLE Python3.5运行时出现下面问题:

    运行结果的文件“我不是药神page10.txt”是空白的
    (2)在cmd下运行出现:

    运行结果的文件“我不是药神page10.txt”是只有一小部分
    ★★★★完美解决办法:
    修改控制台编码:

    命令行输入  chcp
    
    输出显示:活动代码页: 936
    
    表示当前的编码是默认的gbk
    
    修改编码:
    
    命令行输入  chcp 65001
    
    表示转换成utf8
    
    然后在cmd运行python a.py(文件名)就可以成功print爬取的中文文章
    

    ★★★★★★★★常见编码:

    utf8	所有语言
    gbk	简体中文
    gb2312	简体中文
    gb18030	简体中文
    big5	繁体中文
    big5hkscs	繁体中文
    

    3、进行词云展示
    代码:
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    from scipy.misc import imread
    import jieba

    text = open("我不是药神page20.txt","rb").read()
    #结巴分词
    wordlist = jieba.cut(text,cut_all=True)
    wl = " ".join(wordlist)
    #print(wl)#输出分词之后的txt
    
    
    #把分词后的txt写入文本文件
    fenciTxt  = open("fenciHou.txt","w+")
    fenciTxt.writelines(wl)
    fenciTxt.close()
    
    
    #设置词云
    wc = WordCloud(background_color = "white", #设置背景颜色
               mask = imread('hai.jpg'),  #找张图片设置背景图片
               max_words = 2000, #设置最大显示的字数
               stopwords = ["的", "这种", "这样", "还是", "就是", "这个"], #设置停用词
               font_path = "C:WindowsFontssimkai.ttf",  # 设置为楷体 常规
        #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文)
               max_font_size = 60,  #设置字体最大值
               random_state = 30, #设置有多少种随机生成状态,即有多少种配色方案
    )
    myword = wc.generate(wl)#生成词云
    wc.to_file('result.jpg')
    
    #展示词云图
    plt.imshow(myword)
    plt.axis("off")
    plt.show()
    

    结果:

  • 相关阅读:
    2006年百度之星程序设计大赛试题初赛题目题4剪刀石头布
    2006年百度之星程序设计大赛试题初赛题目题5座位调整
    Linux2.6用户空间堆栈区的分配与回收
    Linux2.6物理内存管理
    2006年百度之星程序设计大赛试题初赛题目题6百度语言翻译机
    带权的二分匹配
    二分图带权匹配KuhnMunkres算法(有修改)
    Linux2.6虚拟内存管理
    Linux2.6为数据结构分配内存slab
    2012225面试题目
  • 原文地址:https://www.cnblogs.com/huangrenhui/p/10231079.html
Copyright © 2011-2022 走看看