转载:用代码生成炫酷的词云图—《流浪地球2》

    在网上看到去年别人制作云词图的方法,打算自己也来试试,那我就试试目前比较火的新春电影——《流浪地球2》。

    下面我们就来看一下《流浪地球2》在豆瓣影评中都有哪些优质的评论以及出现最多的词是哪些。

1.确定数据所在的url

    豆瓣电影短评地址: https://movie.douban.com/subject/35267208/comments?status=P

 

 

 

2.发送网络请求

使用requests库发送网络请求,并看下他的文本内容。

url = 'https://movie.douban.com/subject/35267208/comments?status=P'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"} 

response = requests.get(url=url,headers=headers)
print(response.text)

 

 看一下抓取到的网页源码:

 

 

3.分析数据

关于Google使用xpath定位的方法,下面说明,特别方便。

首先到网盘下载Xpath-helper插件:

  1. Xpath-helper插件网盘下载地址
    提取码: 4wk6

  2. 然后下载将xpath-helper.crx文件的后缀改为xpath-helper.zip,拖入谷歌浏览器的扩展程序中。

  3. 扩展程序在谷歌浏览器右上角->点击三个点->更多工具->扩展程序

  4. 重启谷歌浏览器(页面也需要重启),按快捷键Ctrl+Shift+X启动Xpath-helper(注意是大写X),如果使用快捷键没反应有可能是快捷键冲突,需要手动更改。

  5. 打开和关闭xpath helper的快捷键都是:Ctrl+Shift+X。

  6. 打开之后如图所示:是一个黑色的窗体,左边显示query,右边显示result。

  7. 按住ctrl + shift ,然后移动鼠标就可以选择页面上的元素,被选中的元素会显示不同的颜色,query窗口中显示的就是xpath的值,选完以后放开ctrl 和shift键就可以了。

  8. xpath helper除了可以获取页面元素的xpath地址,也可以验证用户自己写的xpath地址是否正确。

  9. query窗口可以手动输入和修改xpath地址。

如何判断输入的地址是正确的呢:

1、result窗口有显示对应的内容,而不是null

2、页面中对应的元素会变成黄色

复合以上两点,说明xpath写对了。

 

言归正传,抓到xpath,使用xpath点位到你想要的数据,可以看到所有评论的定位为//span[@class='short']

 

 于是,我们获取每条评论文本,使用text(),并获取所有影评,使用getall()函数。

html_data = response.text
selector = parsel.Selector(html_data)  # 转换数据类型
comments_list = selector.xpath("//span[@class = 'short']/text()").getall()
print(comments_list)

4.数据存储

将数据保存到txt中,注意把原始数据中的换行符替换掉,并且输入完一条评论后加个换行符。

# 数据存储
    with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f:
        for comment in comments_list:
            f.write(comment.replace('\n', ''))
            f.write('\n')

    #执行到这里的效果,同级目录生成一个“《流浪地球2》.txt ” 文件

5.爬取10页影评数据

通过分析发现每一页的地址只是start不一样且呈规律出现

https://movie.douban.com/subject/35267208/comments?start=20&limit=20&status=P&sort=new_score

https://movie.douban.com/subject/35267208/comments?start=40&limit=20&status=P&sort=new_score

https://movie.douban.com/subject/35267208/comments?start=60&limit=20&status=P&sort=new_score

于是,我们写一个for循环来爬取10页影评

#for循环爬取10页影评
page_count = 0
for page in range(0,180,20):
    page_count += 1
    print("======================正在爬取第{}页数据========================".format(page_count))
    # 获取url地址的内容
    url = 'https://movie.douban.com/subject/35267208/comments?start={}&limit=20&status=P&sort=new_score'.format(page)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"}
    # 将请求返回的结果转换为text
    response = requests.get(url=url, headers=headers)

    html_data = response.text
    selector = parsel.Selector(html_data)  # 转换数据类型
    comments_list = selector.xpath("//span[@class='short']/text()").getall()
    # print(comments_list)

    # 数据存储
    with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f:
        for comment in comments_list:
            f.write(comment.replace('\n', ''))
            f.write('\n')

看一下效果,你也可以看到同级目录生成一个“《流浪地球2》.txt ” 文件。

6.生成词云库

打开刚才的txt,并使用jiaba库进行分词。这里需要现导入jiaba库,如果没有,就安装一下,pip install jieba 很简单的

#生成词云库
f = open('《流浪地球2》.txt',mode = 'r',encoding ='utf-8')
txt = f.read()
txt_list = jieba.lcut(txt)
string1 = " ".join(txt_list)

设置词云图并制作,这里需要安装并导入wordcloud库

#设置词云图并制作,这里需要安装并导入wordcloud库
#词云图设置
wc = wordcloud.WordCloud(width=1000,
                         height=800,
                         background_color='white',
                         font_path='msyh.ttc',
                         scale=15,
                         stopwords= set([line.strip() for line in open('《流浪地球2》.txt',mode='r',encoding='utf-8').readline()]))
#给云词图输入文字
wc.generate(string1)
#保存云词图
wc.to_file('output.png')

完整代码如下:

import jiaba as jiaba
import jieba
import parsel as parsel
import wordcloud
from pip._vendor import requests

#for循环爬取10页影评
page_count = 0
for page in range(0,180,20):
    page_count += 1
    print("======================正在爬取第{}页数据========================".format(page_count))
    # 获取url地址的内容
    url = 'https://movie.douban.com/subject/35267208/comments?start={}&limit=20&status=P&sort=new_score'.format(page)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"}
    # 将请求返回的结果转换为text
    response = requests.get(url=url, headers=headers)

    html_data = response.text
    selector = parsel.Selector(html_data)  # 转换数据类型
    comments_list = selector.xpath("//span[@class='short']/text()").getall()
    # print(comments_list)

    # 数据存储
    with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f:
        for comment in comments_list:
            f.write(comment.replace('\n', ''))
            f.write('\n')

    #执行到这里的效果,同级目录生成一个“《流浪地球2》.txt ” 文件
#生成词云库
f = open('《流浪地球2》.txt',mode = 'r',encoding ='utf-8')
txt = f.read()
txt_list = jieba.lcut(txt)
string1 = " ".join(txt_list)

#设置词云图并制作,这里需要安装并导入wordcloud库
#词云图设置
wc = wordcloud.WordCloud(width=1000,
                         height=800,
                         background_color='white',
                         font_path='msyh.ttc',
                         scale=15,
                         stopwords= set([line.strip() for line in open('《流浪地球2》.txt',mode='r',encoding='utf-8').readline()]))
#给云词图输入文字
wc.generate(string1)
#保存云词图
wc.to_file('output.png')

查看生成的云图:

 

posted @ 2023-02-03 11:42  哔仙女  阅读(230)  评论(0编辑  收藏  举报