python3爬取豆瓣电影影评,并绘制词云图

首先我们选择一部电影,我们选择一个最近较火的哪吒来进行简单操作。
首先找到对应网址,https://movie.douban.com/subject/26794435/comments?start=0&limit=20&sort=new_score&status=P
python3爬取豆瓣电影影评,并绘制词云图_第1张图片

其中,对应网址的网址内容是以0为起点,限制20条评论,因此一页是显示20条评论,我们只要循环传给代码解析即可。。。
爬取代码如下,我们暂时只爬取其中220条评论,因为超过220条评论需要登陆,这样我们就需要另外再进行页面的自动登陆参数传入,我们暂时只实现最基本的。。。
下面代码中将数据url传到代码,然后解析,取出其中span为short的标签,即为评论,然后写入文件即可。

from bs4 import BeautifulSoup
import requests
import os,sys

num=0
while num <=220:
    now=str(num)
    url_comments='https://movie.douban.com/subject/26794435/comments?start='+now+'&limit=20&sort=new_score&status=P'#start=0-200   20为一个界面
    re_x= requests.get(url_comments)
    re_x.encoding = "utf-8"
    html = re_x.text
    soup = BeautifulSoup(html, 'html.parser')
    num=num+20

    fobj = open("影评.txt", 'a', encoding='utf-8')
    for i in soup.find_all('span', class_="short"):  # 评论
        text = str(i).replace('','')
        t1 = text.replace('','')
        fobj.write(t1)

生成txt文件后,进行词云图绘制,绘制代码如下:

# -*- coding: utf-8 -*-
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba


# 生成词云
def create_word_cloud(filename):
    text = open("影评.txt", encoding='utf-8', errors='ignore').read()
    # 结巴分词
    wordlist = jieba.cut(text, cut_all=True)
    wl = " ".join(wordlist)
    # 设置词云
    backgroud_Image = plt.imread('111.jpg')
    wc = WordCloud(
        # 设置背景颜色
        background_color="black",
        # 设置最大显示的词云数
        max_words=2000,
        # 这种字体都在电脑字体中,一般路径
        font_path='C:\Windows\Fonts\simfang.ttf',
        height=1200,
        width=1600,
        # 设置字体最大值
        max_font_size=200,
        # 设置有多少种随机生成状态,即有多少种配色方案
        random_state=50,
        stopwords=["的", "这个", "一个", "没有", "不是", "", "就是"],
        mask=backgroud_Image,
    )
    myword = wc.generate(wl)  # 生成词云
    # 展示词云图
    plt.imshow(myword)
    plt.axis("off")
    plt.show()
    wc.to_file('a.png')  # 把词云保存下


if __name__ == '__main__':
    create_word_cloud('word_py')

生成显示如下:
python3爬取豆瓣电影影评,并绘制词云图_第2张图片

你可能感兴趣的:(python3爬取豆瓣电影影评,并绘制词云图)