python爬取爱情公寓电影评论并制作词云
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)
在这里面要注意一下几点:
- 我们获取的网页源代码,其实不是标准的网页源代码,前面会有一些多余的‘fetchJSON_comment98vv56725(’;这样的。
- 后面也会多余一个,
- 我们再去掉这些多余的符号的时候,一定要小心,千万不要多去,或者少去,都会导致后面的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爬取爱情公寓电影评论并制作词云相关推荐
- Python爬取《三国演义》并且制作词云
前提废话 之前关注了一个python的公众号,每天都会推送文章,每次看都会看到他有使用wordcloud这个库来生成好看的词云,于是乎,我就学习了jieba分词和wordcloud词云. 这里给win ...
- python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...
def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...
- python怎么爬取知乎回答并制作词云_用Python分析了国庆“坑爹”景点......
每次假期后网友总爱去微博.知乎吐槽国庆旅游的坑爹景点,相关话题也频上热榜,在国庆期间也有相关文章[1]通过整理对应话题统计出最坑爹城市前五名分别为杭州.西安.厦门.北京.南京,而最坑爹景点则有西湖.兵 ...
- Python爬取豆瓣电影评论数据(通用模板代码)----以《中国医生》为例
中国医生豆瓣电影评论获取 1 前言 2 数据源分析 3数据爬取(代码实现) 4 结果展示 1 前言 豆瓣是影迷评分.非视频网站,也非购票平台,能长期专门使用豆瓣标记.评价电影的,相对来说是属于影迷 ...
- python用selenium爬取b站评论并制作词云图
文章目录 前言 一.爬取b站评论 1.selenium配置 2.代码 二.制作词云图 1.下载停用词 2.代码 3.注意事项 三.制作成品 1.初期成品 2.成品 前言 b站视频下的评论是下拉加载的. ...
- python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
流浪地球影评爬取 大过年的,蹭个热度,看完电影后爬一下影评并作出词云. 本次影评取自豆瓣: https://movie.douban.com/subject/26266893/ 抓包 首先是拿到访问的 ...
- python怎么爬取知乎回答并制作词云_爬虫|爬取微博动态
爬取微博是爬虫新手入门项目,相对简单.但没想到还是遇到了些问题.. 0 踩点 老规矩第一步先踩点.某个用户的微博网址为:https://weibo.com/u/id,其中id是一长串数字,每个用户 ...
- python爬取b站弹幕_爬取B站弹幕并且制作词云
目录 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠. 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from ...
- 《进击的巨人第三季part2》爬取豆瓣网友评论,制作词云图
莴苣第三季part2实在是太棒了!!!制作和配音都绝了,看起来啊!!尤其<白夜>真的是神回! 先放个结果 自动翻页和下载评论部分的代码: def douban_page_generator ...
最新文章
- 没有点真的大项目工程经验,你真以为能进大厂的算法岗?
- netty之ObjectSizeEstimator
- python自学网站 知乎-如何自学Python拿到25K的薪资?非常感谢这11个站点!
- 从物理到虚拟一次真实的迁移
- 多线程—AQS独占锁与共享锁原理
- LC3视角:Kubernetes下日志采集、存储与处理技术实践
- leetcode 买卖股票的最佳时机 II
- recect build 打包发布后访问出现404错误的简易解决方法
- java中各种集合的用法和比较
- 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2、3、2、1、5、2、4、5、3、2、5、2。试用 FIFO和 LRU 两种算法分别计算出程序访问过程中所发生
- 大家好,我就是那个提【换手机壳颜色变app主题】需求的“产品经理”
- SQL Server数据库查询sql去掉小数后点后末尾的0
- No module named swigfaiss
- 一篇文章带你搞懂DEX文件的结构
- 去除【CSDN论坛】【博客】所有广告的方法(非会员or非专家/版主 也可使用哦)
- android 程序运行,Android如何保持程序一直运行
- windows10系统-12-WPS文档编辑排版
- photoshop去眼袋
- 80老翁谈人生(151):老翁老眼昏花,读错了一个数量级
- 香港中文大学9(深圳)医学院李丛磊组招收博后/科研助理/博士生
热门文章
- 《高阶前端指北》之JavaScript爬虫速成-视频下载(第四弹)
- m3u8直播流视频实时下载小记-HLS(Http Live Streaming)录屏
- 无法启动链接服务器XXX DB Link的 OLE DB 访问接口 SQLNCLI11 的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。链接服务器XXX ...
- 动作识别(二)复现C3D网络
- FANUC机器人如何通过示教器查看软件版本和电机相关配置信息?
- Detecting Adversarial Samples Using Influence Functions and Nearest Neighbors
- Matlab中数据的存储方式
- Windows系统下创建系统还原点 和 进行系统还原
- C/C++定义二维数组(矩阵)
- 分享5个超好用的Vue.js库