、说明

  本文主要讲述采集猫眼电影用户评论进行分析,相关爬虫采集程序可以爬取多个电影评论。

  运行环境:Win10/Python3.5。

  分析工具:jieba、wordcloud、pyecharts、matplotlib。

  基本流程:下载内容 ---> 分析获取关键数据 ---> 保存本地文件 ---> 分析本地文件制作图表

  注意:本文所有图文和源码仅供学习,请勿他用,转发请注明出处!

  本文主要参考:https://mp.weixin.qq.com/s/mTxxkwRZPgBiKC3Sv-jo3g

本文首发地址:https://www.cnblogs.com/reader/p/10070629.html

  

二、开始采集

  2.1、分析数据接口:

    为了健全数据样本,数据直接从移动端接口进行采集,连接如下,其中橙色部分为猫眼电影ID,修改即可爬取其他电影。

    链接地址:http://m.maoyan.com/mmdb/comments/movie/1208282.json?v=yes&offset=15&startTime=

    

    

    接口返回的数据如下,主要采集(昵称、城市、评论、评分和时间),用户评论在 json['cmts'] 中:

    

  2.2、爬虫程序核心内容(详细可以看后面源代码):

    >启动脚本需要的参数如下(脚本名+猫眼电影ID+上映日期+数据保存的文件名):.\myMovieComment.py 1208282 2016-11-16 myCmts2.txt

    

    >下载html内容:download(self, url),通过python的requests模块进行下载,将下载的数据转成json格式  

def download(self, url):"""下载html内容"""print("正在下载URL: "+url)# 下载html内容response = requests.get(url, headers=self.headers)# 转成json格式数据if response.status_code == 200:return response.json()else:# print(html.status_code)print('下载数据为空!')return ""

    

    >然后就是对已下载的内容进行分析,就是取出我们需要的数据:

def parse(self, content):"""分析数据"""comments = []try:for item in content['cmts']:comment = {'nickName': item['nickName'],       # 昵称'cityName': item['cityName'],       # 城市'content': item['content'],         # 评论内容'score': item['score'],             # 评分'startTime': item['startTime'],    # 时间}comments.append(comment)except Exception as e:print(e)finally:return comments

    >将分析出来的数据,进行本地保存,方便后续的分析工作: 

  def save(self, data):"""写入文件"""print("保存数据,写入文件中...")self.save_file.write(data)

   

    > 爬虫的核心控制也即爬虫的程序启动入口,管理上面几个方法的有序执行:

def start(self):"""启动控制方法"""print("爬虫开始...\r\n")start_time = self.start_timeend_time = self.end_timenum = 1while start_time > end_time:print("执行次数:", num)# 1、下载htmlcontent = self.download(self.target_url + str(start_time))# 2、分析获取关键数据comments = ''if content != "":comments = self.parse(content)if len(comments) <= 0:print("本次数据量为:0,退出爬取!\r\n")break# 3、写入文件res = ''for cmt in comments:res += "%s###%s###%s###%s###%s\n" % (cmt['nickName'], cmt['cityName'], cmt['content'], cmt['score'], cmt['startTime'])self.save(res)print("本次数据量:%s\r\n" % len(comments))# 获取最后一条数据的时间 ,然后减去一秒start_time = datetime.strptime(comments[len(comments) - 1]['startTime'], "%Y-%m-%d %H:%M:%S") + timedelta(seconds=-1)# start_time = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S")# 休眠3snum += 1time.sleep(3)self.save_file.close()print("爬虫结束...")

    

  2.3 数据样本,最终爬取将近2万条数据,每条记录的每个数据使用 ### 进行分割:

  

三、图形化分析数据

  3.1、制作观众城市分布热点图,(pyecharts-geo):

    从图表可以轻松看出,用户主要分布地区,主要以沿海一些发达城市群为主:

    

def createCharts(self):"""生成图表"""# 读取数据,格式:[{"北京", 10}, {"上海",10}]data = self.readCityNum()# 1 热点图geo1 = Geo("《无名之辈》观众位置分布热点图", "数据来源:猫眼,Fly采集", title_color="#FFF", title_pos="center", width="100%", height=600, background_color="#404A59")attr1, value1 = geo1.cast(data)geo1.add("", attr1, value1, type="heatmap", visual_range=[0, 1000], visual_text_color="#FFF", symbol_size=15, is_visualmap=True, is_piecewise=False, visual_split_number=10)geo1.render("files/无名之辈-观众位置热点图.html")# 2 位置图geo2 = Geo("《无名之辈》观众位置分布", "数据来源:猫眼,Fly采集", title_color="#FFF", title_pos="center", width="100%", height=600,background_color="#404A59")attr2, value2 = geo1.cast(data)geo2.add("", attr2, value2, visual_range=[0, 1000], visual_text_color="#FFF", symbol_size=15,is_visualmap=True, is_piecewise=False, visual_split_number=10)geo2.render("files/无名之辈-观众位置图.html")# 3、top20 柱状图data_top20 = data[:20]bar = Bar("《无名之辈》观众来源排行 TOP20", "数据来源:猫眼,Fly采集", title_pos="center", width="100%", height=600)attr, value = bar.cast(data_top20)bar.add('', attr, value, is_visualmap=True, visual_range=[0, 3500], visual_text_color="#FFF", is_more_utils=True, is_label_show=True)bar.render("files/无名之辈-观众来源top20.html")print("图表生成完成")

  3.2、制作观众人数TOP20的柱形图,(pyecharts-bar):

    

  3.3、制作评论词云,(jieba、wordcloud):

    

    生成词云核心代码:

def createWordCloud(self):"""生成评论词云"""comments = self.readAllComments()  # 19185# 使用 jieba 分词commens_split = jieba.cut(str(comments), cut_all=False)words = ''.join(commens_split)# 给词库添加停止词stopwords = STOPWORDS.copy()stopwords.add("电影")stopwords.add("一部")stopwords.add("无名之辈")stopwords.add("一部")stopwords.add("一个")stopwords.add("有点")stopwords.add("觉得")# 加载背景图片bg_image = plt.imread("files/2048_bg.png")# 初始化 WordCloudwc = WordCloud(width=1200, height=600, background_color='#FFF', mask=bg_image, font_path='C:/Windows/Fonts/STFANGSO.ttf', stopwords=stopwords, max_font_size=400, random_state=50)# 生成,显示图片wc.generate_from_text(words)plt.imshow(wc)plt.axis('off')plt.show()

    

四、修改pyecharts源码

  4.1、样本数据的城市简称与数据集完整城市名匹配不上:

    使用位置热点图时候,由于采集数据城市是一些简称,与pyecharts的已存在数据的城市名对不上, 所以对源码进行一些修改,方便匹配一些简称。

    黔南 => 黔南布依族苗族自治州

    模块自带的全国主要市县经纬度在:[python安装路径]\Lib\site-packages\pyecharts\datasets\city_coordinates.json

    由于默认情况下,一旦城市名不能完全匹配就会报异常,程序会停止,所以对源码修改如下(报错方法为 Geo.add()),其中添加注析为个人修改部分:

def get_coordinate(self, name, region="中国", raise_exception=False):"""Return coordinate for the city name.:param name: City name or any custom name string.:param raise_exception: Whether to raise exception if not exist.:return: A list like [longitude, latitude] or None"""if name in self._coordinates:return self._coordinates[name]coordinate = get_coordinate(name, region=region)# [ 20181204 添加# print(name, coordinate)if coordinate is None:# 如果字典key匹配不上,尝试进行模糊查询search_res = search_coordinates_by_region_and_keyword(region, name)# print("###",search_res)if search_res:coordinate = sorted(search_res.values())[0]# 20181204 添加 ]if coordinate is None and raise_exception:raise ValueError("No coordinate is specified for {}".format(name))return coordinate

   

    相应的需要对 __add()方法进行如下修改:

  

五、附录-源码

  *说明:源码为本人所写,数据来源为猫眼,全部内容仅供学习,拒绝其他用途!转发请注明出处!

源码请移步博客园:https://www.cnblogs.com/reader/p/10070629.html

 

[Python] 通过采集两万条数据,对《无名之辈》影评分析相关推荐

  1. 5 多数据save_[Python] 通过采集两万条数据,对无名之辈影评分析

    点击上方"Python技术之巅",马上关注 真爱,请置顶或星标 一.说明 本文主要讲述采集猫眼电影用户评论进行分析,相关爬虫采集程序可以爬取多个电影评论. 运行环境:Win10/P ...

  2. 基于python的影评数据分析_[Python] 通过采集两万条数据,对《无名之辈》影评分析...

    一.说明 本文主要讲述采集猫眼电影用户评论进行分析,相关爬虫采集程序可以爬取多个电影评论. 运行环境:Win10/Python3.5. 分析工具:jieba.wordcloud.pyecharts.m ...

  3. 两万条数据需要做个数据图_第3关:基于Excel对电商母婴数据进行分析

    对于新手,拿到数据往往不知如何下手.那就按图索骥,依照以下五部一步步来 step1:明确问题 目标必须明确,基于当前业务出发.如一千个读者有一千个哈姆雷特一样,数据可以被解读出不同样子,必须集中目标, ...

  4. python多线程插入1万条数据

    前言 在业务中,经常碰到需要从外部批量读取数据然后导入到mysql等数据库的操作,通常情况下,我们使用一个insert语句就可以完成,但在数据量为上万甚至百万的时候,这样做是不是太耗时了呢? 下面我们 ...

  5. 我们用Python分析了B站4万条数据评论,揭秘本山大叔《念诗之王》大热原因!...

    来源:恋习Python 本文约2000字,建议阅读10分钟. 我们通过Python大法通过获取B站:[春晚鬼畜]赵本山:我就是念诗之王!4万条数据评论,与大家一起看看其背后火起来的原因. 1990年本 ...

  6. Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!

    <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...

  7. Python看春运,万条拼车数据背后的春节迁徙地图

    Python看春运,万条拼车数据背后的春节迁徙地图 今天是正月初九,春运返程也已过半.这篇文章,作者对北京.上海.广州.深圳.杭州等地 1万多条出行数据进行分析,得出了一些有意思的结论,并且绘制了这几 ...

  8. Python分析9万条数据告诉你复仇者联盟谁才是绝对C位

    作者 | 罗昭成 责编 | 唐小引 转载自CSDN(ID:CSDNnews) <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就 ...

  9. 复仇者联盟谁才是绝对 C 位?Python分析9万条数据告诉你答案

    作者 | 罗昭成 责编 | 唐小引 <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁 ...

最新文章

  1. 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
  2. 解决Android Device Chooser 找不到设备问题
  3. 2022-01-17
  4. JAVA WEB篇4——Filter、Listener
  5. 通过Python扫描代码关键字并进行预警
  6. laravel redis_解析laravel之redis简单模块操作
  7. 1.MongoDB入门详解
  8. 2021年数学建模国赛A题优秀论文(Word)(FAST”工作抛物面的优化设计)
  9. Lesson 17.11 案例一:SVHN街道实景门牌识别
  10. Ubuntu版本及对应的代号(4.10-22.04) 共18年整理
  11. 【安全牛学习笔记】 端口扫描
  12. 一次性下载CVPR/ICCV/ECCV会议所有论文并提取论文标题重命名pdf文件
  13. fh admin mysql版本_在用mysql-front的时候遇到显示:程序注册时间到期程序将被限制模式下运行。...
  14. 多边形画椭圆算法java_运用椭圆画法,45行代码画出随意正多边形
  15. 浏览我的php网页时,出现的都是网页的代码
  16. 坚果云和百度云哪个好?
  17. 全球及中国AR智能隐形眼镜市场发展形势分析及投资策略预测报告2022-2028年
  18. 人工智能有什么价值和意义
  19. LS-DYNA 重启动分析
  20. JS简单实现进度条效果

热门文章

  1. 喝杯水都能泄露指纹?屏下指纹识别设备被攻破
  2. html设计应用程序,软件工程师-20个HTML5应用程序设计示例(10页)-原创力文档
  3. vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
  4. Chainlink官方文档翻译(二) 中间件-随机数 Intermediates - Random Numbers)
  5. c语言航标知识点,问题——阅读教学的航标
  6. (145)光线追踪距离场柔和阴影
  7. 使用高匿代理访问西刺代理(假如ip被封可用高匿ip访问网站)
  8. 7、【WebGIS实战】专题篇——API key
  9. 移动端判断当前手机设备是安卓(Android)还是苹果ios
  10. 《疯狂的石头》在线观看(网通用户)