python爬取爱情公寓电影评论并制作词云

前言:

    一直想研究研究如何生成词云,今天抽点时间给大家分享一下制作词云的过程,本文重在研究词云如何制作,由于时间仓促,至于爬取的数据量不大,大家可自行爬取其他数据。


爬取爱情公寓电影评论

    因为主要是练习词云,所有我就顺便百度了一下爱情公寓,就出来了,链接如下:http://v.baidu.com/movie/134804.htm?fr=open_bdps_dyyg,大家可自行换其他网站爬取评论,数据量最好大一点,才有价值。也可以当一个爬虫进行练习,里面也还是有一些坑的,我们直接进去网站,到下直接就看到评论了,总共只有240条,我们按照常规套路右键检查,直接选取元素,点选评论,

直接看到结果了,然后一如既往的把上面的url拿下来,直接一波requests.get请求,结果一看源代码,根本就没有任何关于评论的数据。这样我们就怀疑是不是ajxs动态加载的,我们选到network,再选到xhr中,仔细观察,会发现评论数据藏在一个list开头的js文件中,

再点到hesder回去看一下,url其实并不上上面的那个,还是发送的get请求,这样就好办了,我们直接在js文件中提取comment数据就行了,直接上代码:

def get_page(self, url):response = requests.get(url, headers=self.headers)response.encoding = "utf-8"# 注意下面两行代码在处理过程中容易多去花括号或者少去花括号,都会造成json格式报错,一定要注意data = response.text.split('(', 1)[1]  # 根据(进行切片一次处理,取第二部分data = data[0:len(data) - 1]  # 然后去掉后面的)和;items = json.loads(data)for i in range(len(items['data']['data'])):item = items['data']['data'][i]['content']# print(item)self.info_list.append(item)

在这里面要注意一下几点:

  1. 我们获取的网页源代码,其实不是标准的网页源代码,前面会有一些多余的‘fetchJSON_comment98vv56725(’;这样的。
  2. 后面也会多余一个,
  3. 我们再去掉这些多余的符号的时候,一定要小心,千万不要多去,或者少去,都会导致后面的json数据提取不出来。(这里推荐大家把源代码复制下来,然后用json格式在线解析,就一目了然了。)
items = json.loads(data)

json.loads 是将字符串格式转化为json数据。

for i in range(len(items['data']['data'])):

len(items[‘data’][‘data’])是用来动态计算每一页有多少个评论。
这里结果我用了一个列表把数据装了起来,在调一个写入的方法将数据写入到本地TXT文件就行了。代码如下:

def write(self, info):with open('comment.txt', 'a', encoding="utf-8") as f:f.write(info + "\n")f.close()

最后代码如下:

import requests
import json
import jieba
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as pltclass Aiqing(object):def __init__(self):self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}self.info_list = []def get_page(self, url):response = requests.get(url, headers=self.headers)response.encoding = "utf-8"# 注意下面两行代码在处理过程中容易多去花括号或者少去花括号,都会造成json格式报错,一定要注意data = response.text.split('(', 1)[1]  # 根据(进行切片一次处理,取第二部分data = data[0:len(data) - 1]  # 然后去掉后面的)和;items = json.loads(data)for i in range(len(items['data']['data'])):item = items['data']['data'][i]['content']# print(item)self.info_list.append(item)def write(self, info):with open('comment.txt', 'a', encoding="utf-8") as f:f.write(info + "\n")f.close()def main(self):for page in range(1, 19):if page == 1:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539196&page=1&workstype=movie&works_id=134804&_=1534155539197'elif page < 3:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539180&page={}&workstype=movie&works_id=134804&_=153415553920{}'.format(page, page + 6)else:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539180&page={}&workstype=movie&works_id=134804&_=15341555392{}'.format(page, page + 6)self.get_page(url)for info in self.info_list:self.write(info)self.ciyun()if __name__ == "__main__":aiqing = Aiqing()aiqing.main()

这里还有要说的就是,上面的我们找的list那个文件,只是一页的评论数据,第二页要点击。加载更多,然后会出现后面的list文件,但是会发现,第一个跟后面的url不一样,也没有什么规律,所以我加了一个判断, 至于第2也到第4为什么也有,那是因为我没看到好的表示page的办法,所有就这样写了,大家有什么好办法也可以提出来。

利用数据制作词云

    制作词云我们先找一个图片,用作词云的外形,然后就是代码了,我么写的是类,可能没必要,但是大家还是要养成一个好的习惯,而且感觉写类方法,很简单明了,我直接加两个词云方法就行了,也不会影响其他代码。直接上代码如下:

    def word_cloud(self, text):words_list = []word_generator = jieba.cut(text, cut_all=False)  # 返回的是一个迭代器for word in word_generator:if len(word) > 1:  # 去掉单字words_list.append(word)return ' '.join(words_list)def ciyun(self):back_color = imread('fengche.png')  # 解析该图片wc = WordCloud(background_color='white',  # 背景颜色max_words=500,  # 最大词数mask=back_color,  # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略max_font_size=50,  # 显示字体的最大值font_path="C:\Windows\Fonts\ygyxsziti2.0.ttf",  # 找到本地字体文件,或者下载字体文件random_state=10,  # 为每个词返回一个PIL颜色scale=15,  # 默认值1。值越大,图像密度越大越清晰# width=1000,  # 图片的宽# height=860  # 图片的长)# 打开保存的评论数据text = open('comment.txt', encoding="utf-8").read()text = self.word_cloud(text)wc.generate(text)# 基于彩色图像生成相应彩色image_colors = ImageColorGenerator(back_color)# 显示图片plt.imshow(wc)# 关闭坐标轴plt.axis('off')# 绘制词云plt.figure()plt.imshow(wc.recolor(color_func=image_colors))plt.axis('off')# 保存图片wc.to_file('apple.jpg')print('comment.png has bee saved!')

这里大家需要安装两个库wordcloud、scipy和jieba安装方式直接(pip install 模块名),wordcloud是用来制作词云的,scipy.misc方法用来解析图片,jieba是用来切词的,我们需要将评论切分成词,我写的一个word_cloud()函数是用来切词的,WordCloud函数参数又很多,基本用到我的这些也就够了,我代码后面的注释也很详细,关于详细的如何设置,大家可以参看jieba+wordcloud,
这里有可能会存在编码格式的问题,大家如果在写入文件的时候设置的编码格式是utf-8的话,那么在写词云打开这个文本的时候也用utf-8编码,就不会存在编码格式的问题了,其他就没什么问题了,

我就随便弄了一个词云,大家可以找好看的图片,自己弄就行了。最后奉上全部代码。

# -*- conding=UTF-8 -*-
import requests
import json
import jieba
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as pltclass Aiqing(object):def __init__(self):self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}self.info_list = []def get_page(self, url):response = requests.get(url, headers=self.headers)response.encoding = "utf-8"# 注意下面两行代码在处理过程中容易多去花括号或者少去花括号,都会造成json格式报错,一定要注意data = response.text.split('(', 1)[1]  # 根据(进行切片一次处理,取第二部分data = data[0:len(data) - 1]  # 然后去掉后面的)和;items = json.loads(data)for i in range(len(items['data']['data'])):item = items['data']['data'][i]['content']# print(item)self.info_list.append(item)def write(self, info):with open('comment.txt', 'a', encoding="utf-8") as f:f.write(info + "\n")f.close()'''
绘制词云部分
'''def word_cloud(self, text):words_list = []word_generator = jieba.cut(text, cut_all=False)  # 返回的是一个迭代器for word in word_generator:if len(word) > 1:  # 去掉单字words_list.append(word)return ' '.join(words_list)def ciyun(self):back_color = imread('fengche.png')  # 解析该图片wc = WordCloud(background_color='white',  # 背景颜色max_words=500,  # 最大词数mask=back_color,  # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略max_font_size=50,  # 显示字体的最大值font_path="C:\Windows\Fonts\ygyxsziti2.0.ttf",  # 找到本地字体文件,或者下载字体文件random_state=10,  # 为每个词返回一个PIL颜色scale=15,  # 默认值1。值越大,图像密度越大越清晰# width=1000,  # 图片的宽# height=860  # 图片的长)# 打开保存的评论数据text = open('comment.txt', encoding="utf-8").read()text = self.word_cloud(text)wc.generate(text)# 基于彩色图像生成相应彩色image_colors = ImageColorGenerator(back_color)# 显示图片plt.imshow(wc)# 关闭坐标轴plt.axis('off')# 绘制词云plt.figure()plt.imshow(wc.recolor(color_func=image_colors))plt.axis('off')# 保存图片wc.to_file('apple.jpg')print('comment.png has bee saved!')def main(self):for page in range(1, 19):if page == 1:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539196&page=1&workstype=movie&works_id=134804&_=1534155539197'elif page < 3:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539180&page={}&workstype=movie&works_id=134804&_=153415553920{}'.format(page, page + 6)else:url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108169115031412963_1534155539180&page={}&workstype=movie&works_id=134804&_=15341555392{}'.format(page, page + 6)self.get_page(url)for info in self.info_list:self.write(info)self.ciyun()if __name__ == "__main__":aiqing = Aiqing()aiqing.main()

谢谢!

python爬取爱情公寓电影评论并制作词云相关推荐

  1. Python爬取《三国演义》并且制作词云

    前提废话 之前关注了一个python的公众号,每天都会推送文章,每次看都会看到他有使用wordcloud这个库来生成好看的词云,于是乎,我就学习了jieba分词和wordcloud词云. 这里给win ...

  2. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

  3. python怎么爬取知乎回答并制作词云_用Python分析了国庆“坑爹”景点......

    每次假期后网友总爱去微博.知乎吐槽国庆旅游的坑爹景点,相关话题也频上热榜,在国庆期间也有相关文章[1]通过整理对应话题统计出最坑爹城市前五名分别为杭州.西安.厦门.北京.南京,而最坑爹景点则有西湖.兵 ...

  4. Python爬取豆瓣电影评论数据(通用模板代码)----以《中国医生》为例

    中国医生豆瓣电影评论获取 1 前言 2 数据源分析 3数据爬取(代码实现) 4 结果展示 1 前言   豆瓣是影迷评分.非视频网站,也非购票平台,能长期专门使用豆瓣标记.评价电影的,相对来说是属于影迷 ...

  5. python用selenium爬取b站评论并制作词云图

    文章目录 前言 一.爬取b站评论 1.selenium配置 2.代码 二.制作词云图 1.下载停用词 2.代码 3.注意事项 三.制作成品 1.初期成品 2.成品 前言 b站视频下的评论是下拉加载的. ...

  6. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...

    流浪地球影评爬取 大过年的,蹭个热度,看完电影后爬一下影评并作出词云. 本次影评取自豆瓣: https://movie.douban.com/subject/26266893/ 抓包 首先是拿到访问的 ...

  7. python怎么爬取知乎回答并制作词云_爬虫|爬取微博动态

    ​ 爬取微博是爬虫新手入门项目,相对简单.但没想到还是遇到了些问题.. 0 踩点 老规矩第一步先踩点.某个用户的微博网址为:https://weibo.com/u/id,其中id是一长串数字,每个用户 ...

  8. python爬取b站弹幕_爬取B站弹幕并且制作词云

    目录 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠. 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from ...

  9. 《进击的巨人第三季part2》爬取豆瓣网友评论,制作词云图

    莴苣第三季part2实在是太棒了!!!制作和配音都绝了,看起来啊!!尤其<白夜>真的是神回! 先放个结果 自动翻页和下载评论部分的代码: def douban_page_generator ...

最新文章

  1. 没有点真的大项目工程经验,你真以为能进大厂的算法岗?
  2. netty之ObjectSizeEstimator
  3. python自学网站 知乎-如何自学Python拿到25K的薪资?非常感谢这11个站点!
  4. 从物理到虚拟一次真实的迁移
  5. 多线程—AQS独占锁与共享锁原理
  6. LC3视角:Kubernetes下日志采集、存储与处理技术实践
  7. leetcode 买卖股票的最佳时机 II
  8. recect build 打包发布后访问出现404错误的简易解决方法
  9. java中各种集合的用法和比较
  10. 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2、3、2、1、5、2、4、5、3、2、5、2。试用 FIFO和 LRU 两种算法分别计算出程序访问过程中所发生
  11. 大家好,我就是那个提【换手机壳颜色变app主题】需求的“产品经理”
  12. SQL Server数据库查询sql去掉小数后点后末尾的0
  13. No module named swigfaiss
  14. 一篇文章带你搞懂DEX文件的结构
  15. 去除【CSDN论坛】【博客】所有广告的方法(非会员or非专家/版主 也可使用哦)
  16. android 程序运行,Android如何保持程序一直运行
  17. windows10系统-12-WPS文档编辑排版
  18. photoshop去眼袋
  19. 80老翁谈人生(151):老翁老眼昏花,读错了一个数量级
  20. 香港中文大学9(深圳)医学院李丛磊组招收博后/科研助理/博士生

热门文章

  1. 《高阶前端指北》之JavaScript爬虫速成-视频下载(第四弹)
  2. m3u8直播流视频实时下载小记-HLS(Http Live Streaming)录屏
  3. 无法启动链接服务器XXX DB Link的 OLE DB 访问接口 SQLNCLI11 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。链接服务器XXX ...
  4. 动作识别(二)复现C3D网络
  5. FANUC机器人如何通过示教器查看软件版本和电机相关配置信息?
  6. Detecting Adversarial Samples Using Influence Functions and Nearest Neighbors
  7. Matlab中数据的存储方式
  8. Windows系统下创建系统还原点 和 进行系统还原
  9. C/C++定义二维数组(矩阵)
  10. 分享5个超好用的Vue.js库