首页 > 其他分享 >转载:用代码生成炫酷的词云图—《流浪地球2》

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

时间:2023-02-03 11:58:28浏览次数:65  
标签:xpath 代码生成 url 流浪 list comments 云图 炫酷 txt

    在网上看到去年别人制作云词图的方法,打算自己也来试试,那我就试试目前比较火的新春电影——《流浪地球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')

查看生成的云图:

 

标签:xpath,代码生成,url,流浪,list,comments,云图,炫酷,txt
From: https://www.cnblogs.com/zhaocbbb/p/17088656.html

相关文章

  • mybatis-plus代码生成器
    用idea建一个javaproject项目,然后在pom.xml中加入以下依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifac......
  • MyBatis和MyBatis-Plus代码生成
    MyBatis代码生成1.在pom中添加依赖<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artif......
  • SimpleAdmin手摸手教学之:代码生成
    一、说明大部分项目里,其实有很多代码是重复的,几乎每个模块都有CRUD增删改查的功能,而这些功能的实现代码往往是大同小异的。如果这些功能都要自己去手写,非常无聊枯燥,浪费......
  • 云图说 | 华为云主机安全服务(新版)来啦!
    摘要:主机安全服务以工作负载为中心,解决了混合云、多云数据中心服务器的负载保护,集成了主机、容器和网页防篡改的安全防护。本文分享自华为云社区《【云图说】|第265期......
  • 云图说 | 华为云主机安全服务(新版)来啦!
    摘要:主机安全服务以工作负载为中心,解决了混合云、多云数据中心服务器的负载保护,集成了主机、容器和网页防篡改的安全防护。本文分享自华为云社区《​​【云图说】|第265期......
  • typora+picGo腾讯云图床设置
    前言需求原因​ 大部分人在写博客都是使用的较为好看的markdown格式,而我们在本地编写markdown时其中的图片一般都是截图后粘贴的。这些图片其实都保存在了本地文件夹中,ma......
  • LLVM目标无关代码生成器Target-Independent Code Generator
    LLVM目标无关代码生成器Target-IndependentCodeGenerator介绍LLVM目标无关代码生成器是一个框架,提供了一套可重用组件,用于将LLVM内部表示转换为指定目标的机器代码,无论......
  • 《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 祝大家春节快乐视频版:https://www.bilibili.com/video/BV1U......
  • SDUT 简单的代码生成程序
    SDUT简单的代码生成程序Description通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有>空寄存器>内存中存有>以后不再使用......
  • 云图说 | 勒索病毒防治解决方案
    摘要:勒索病毒是当前黑客最有效的“变现”方式,黑客通过漏洞植入病毒等方式,对客户关键数据进行加密,受害客户需支付大笔费用才可能对数据进行解密使用。本文分享自华为云社区......