本文以《少年的你》为例, 简单实现了爬取数据–保存数据–分析数据–图表展示的全流程. 此为第一个版本, 有很多需要地方将在后续版本中改进.
具体代码见github: https://github.com/shaoecho/DataAnalysis_01_douban

文章目录

  • **1.** **豆瓣短评数据抓取**
    • 1.1 网页分析 : 审查网页元素,获取目标网站树状结构
    • 1.2 数据爬取 : 用request +xpath 爬取前25页数据
    • 1.3 数据保存 : 创建DataFrame并将数据导出为.csv
  • **2.** **数据分析**
    • 2.1 制作词云 : WordCloud+jieba
    • 2.2 统计词频 : jieba + counter
    • 2.3 情感分析 : 用snownlp根据电影短评进行简单的情感分析
  • 3. **数据展示**
    • 3.1 评分分布图
    • 3.2 每日评分变化趋势图
    • 3.3 PowerBI的词云的插件
  • **4.** 需要改进的地方

1. 豆瓣短评数据抓取

首先, 去网上查一下豆瓣的反爬机制, 豆瓣从2017.10月开始全面禁止爬取数据:

  • 白天1分钟最多可以爬取40次,晚上一分钟可爬取60次数,超过此次数则会封禁IP地址.
  • 非登录状态下,最多能爬200条数据.
  • 登录状态下,最多能爬500条数据, 也就是前25页.

本文抓取的是《少年的你》豆瓣热门短评前25页的数据.

1.1 网页分析 : 审查网页元素,获取目标网站树状结构

目标网页网址为:

https://movie.douban.com/subject/30166972/comments?sort=new_score&status=P

如下图所示:

本此数据爬取主要获取的内容有:

  • 评论用户ID
  • 评论内容
  • 评分
  • 评论日期
  • 支持数

分析一下网页结构, 每一页都有20条评论, 即有20个”comment-item”中,要爬取的数据都在comment-item中, 所以在每个页面依次提取20个”comment-item”中的数据即可.

最后再分析一下翻页的逻辑:

第1页URL如下:

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

第2页URL如下:

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

第3页URL如下:

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

看出来, 翻页就是在start=0上加20, 每翻页一次加20.

这样, 网页的逻辑就分析完成了, 下一步开始正式写爬虫.

1.2 数据爬取 : 用request +xpath 爬取前25页数据

此爬虫的主框架如下:

  1. 模拟登录 login_douban()函数
用的是requests.Session.post()来发送参数模拟登录.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191219225947637.png)使用fake_useragent库中的UserAgent来伪造请求头中需要的UserAgent.
设置好requests.Session.post()需要的各项参数后, 直接传入就可以了.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191219230003499.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FxaV9zaGFv,size_16,color_FFFFFF,t_70)
  1. 代理IP

试了一些免费代理IP, 总是被封, 图省事, 直接用的收费的, 选的阿布云, 一小时1块钱就可以了, 收费代理的接入也很简单, 参照文档就可以了.
阿布云地址: https://center.abuyun.com/#/cloud/http-proxy/tunnel/lists

  1. 获取页面response
主要用的requests.get()方法来获取response, 上一步用的收费代理ip也是作为参数传入requests.get()中.
设置好参数url, headers,proxies和cookies后, 传入requests.get()就行了.



4. 从response中提取数据

  • a) 提取用户名和点赞数很简单, 只要用xpath按照常规方法提取出来,然后存入对应的列表就可以了.
  • b) 提取评论内容时, 有些麻烦.

当没有文字评论内容时,存在子节点,但内容为空。提取不到内容, 最后保存进列表后, 会导致数据错位. 所以此处要判断, 爬取的评论内容是否为空, 如果为空, 就用”无”来填入.

  • c) 爬取评分时, 遇到巨坑 !

和没有文字评论还不一样,当没有评分时,连节点也没有。并且当没有评分时,时间xpath路径是不一样的, 所以先要判断是否有评分, 再去根据不同情况提取时间数据.

1.3 数据保存 : 创建DataFrame并将数据导出为.csv

将5个list中scrapyPage页的所有数据保存进DataFrame.

2. 数据分析

2.1 制作词云 : WordCloud+jieba

想通过豆瓣短评分析一下, 观众的评论主要集中在哪些点上, 所以想到了通过词云的方式来展示.

制作词云的前提是要先对短评语句分成一个一个词, 英文语句是已经通过空格,将语句分成了一个个的单词, 但中文是不一样,所以需要选择一个中文分词工具, 这里选择了jieba. 它 是一款.基于Python的中文分词工具, 安装使用都非常方便,功能强悍,推荐使用.

Jieba和WordCloud的使用都不复杂, 参考网上的教程看一下就可以了.

构建词云的时候, 不设置背景图片的话, 就是采用默认图片, 是一个矩形图片.

也可以自定义背景图片, 下面图示, 前一张是背景图, 后一张图是生成的词云.

2.2 统计词频 : jieba + counter

使用jieba进行分词, 然后中collections中的counter计数器来统计词频.

逻辑大概是, 先删除语句中的非法字符, 然后用jieba进行分词, 再在分词中去掉你不想统计的词(停用词), 得到的就是你想统计的分词列表. 最后用计数器counter()统计.

2.3 情感分析 : 用snownlp根据电影短评进行简单的情感分析

Snownlp是中文自然语言处理工具, 和jieba有些类似, 也可以进行分词, 词性标注, 情感分析等功能.此处我们使用了它的情感分析功能.

3. 数据展示

3.1 评分分布图

爬取的数据导入PowerBI, 尝试用PowerBI进行一些分析. 发现PowerBI使用特别方便, 展示性也好, 强烈推荐.

3.2 每日评分变化趋势图

3.3 PowerBI的词云的插件

PowerBI中也有词云的插件, 试用了一下, 发现还是需要提前进行分词, 统计词频,然后再用内部插件做词云, 而且可自定义的程度不高, 背景图也不能换, 不推荐使用PowerBI的词云插件.

4. 需要改进的地方

  1. 爬虫代码写在一个py文件里, 比较混乱, 应该将原本换在一个文件里的代码拆分为合理的模块, 比如将付费代理封装成一个类, 写在单独的类中.

  2. 这个版本的cookie是复制添加的, 每次运行都要重新复制, 比较蠢.下版本应该设置伪装登录, 使得cookie能自动获取和自动更新.

  3. 流程设计有问题, 将数据保存放在了所有一步, 必须等所有数据都爬完了之后才能保存, 一旦爬虫中途中断, 最后一个数据也得不到.一个版本应该改为边爬边保存.

  4. 断点续爬, 如果中途出错, 不能从头开始, 要从上次停止的地方继续爬取.

数据分析小项目01 __《少年的你》豆瓣短评__V1.0相关推荐

  1. Java 小项目 01 简单记账软件

    1 功能介绍 1.1 功能介绍 查询账务 多条件查询 添加账务 编辑账务 删除账务 1.2 运行结果 2 环境搭建 1)开发工具:eclipse 2)第三方jar包 jar 包下载 commons-d ...

  2. 【Python 爬虫小项目 01】租房数据

    思路描述: 整体观测:某网后台数据是自动从数据库里抓取的:比如我选中[深圳]-[南山区]-[竹子林],共有250套房源,每页呈现30套房源数据,这30套在每一次点击进去数据都会略有不同. url方面: ...

  3. Python 小项目 01 爬虫项目 爬取链家网南京地区二手房信息

    SpiderLianjia 介绍 python爬虫小程序,爬取链家网南京地区普通住宅二手房数据. 代码下载: https://gitee.com/lihaogn/SpiderLianjia 1 程序设 ...

  4. Unity 3D项目 - 01 - 开始游戏主界面

    Unity 3D项目 - 01 - 开始游戏主界面 一.常用代码 0.打印调试 Debug.Log():将消息记录到 Unity 控制台.<Debug-Log - Unity 脚本 API> ...

  5. 《消失的她》豆瓣短评数据分析

    <消失的她>豆瓣短评数据分析 文章目录 <消失的她>豆瓣短评数据分析 一.前言 二.数据加载和预处理 三.探索性数据分析 1.查看评论的评价分布 2.查看评论点赞数的分布 3. ...

  6. 小项目-弹幕数据分析+词云展示

    端午节除了学习领导要求的蒙特卡洛和VAR建模分析,闲暇时间做了一个小项目,记录在博客上. 5月29日,备受关注的季中邀请赛在韩国釜山图书馆结束,代表LPL出战的RNG3比2战胜了韩国的T1,看的那叫一 ...

  7. 【机器学习/数据分析大项目】黑色星期五销售预测(详细报告)

    [机器学习/数据分析大项目]黑色星期五销售预测 一.项目背景 二.问题描述 三.数据集描述 四.项目代码 1. 导入项目所需的库 2. 读取数据集 3. 检查缺失值 ★ 探索性数据分析(EDA): 4 ...

  8. 【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码

    前言 1.街霸游戏 1.1 KO街霸 程序完整源码 程序的输出界面 1.2 春丽VS巴洛克 参考源码 2.猜谜游戏 2.1简单的猜数字游戏 项目要求 参考源码 2.2 进阶的猜姓名游戏 项目要求 参考 ...

  9. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

最新文章

  1. Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!
  2. maven 打包jar lib
  3. AndroidStudio报错:GradleSyncIssues-Could not install Gradle distribution from...
  4. hdu 5213(容斥原理+莫队算法)
  5. mysql查询的时候会涉及到锁_Mysql 查询 锁的问题?
  6. Linux 的权限表达式
  7. pdf温度记录仪开发_蔬菜、鲜果、奶制品冷链温度监控系统监控食品让客户放心...
  8. web获取多行mysql结果_mysql中的多行查询结果合并成一个
  9. MASQUERADE
  10. 津巴布韦 apn_津巴布韦的回忆-你负担不起回家
  11. 35岁的程序员:第14章,前奏
  12. 计算机游戏图形是什么意思,专业图形显卡和游戏显卡区别
  13. html嵌入虎牙直播功能,虎牙开放平台-年轻人喜爱的互动直播平台,直播帮助,直播教程,虎牙直播...
  14. 2013-1-20·
  15. 共享锁和排它锁的区别
  16. CNCERT在FIRST会议关于国内PC被攻击的数据
  17. swing hacks_这些firefox hacks和扩展程序增强了您的隐私
  18. 黃綜翰:我的風羽路-新團隊新夢想
  19. B-树和B+树的区别
  20. PL/0编译程序的简单实现

热门文章

  1. groovy+grails+gradle开发
  2. web性能优化 JS/CSS CDN加速公共库
  3. 低分辨率和畸变严重的棋盘格角点的自动检测
  4. 堆、栈、队列的区别和联系
  5. 我能等待。。。。。。
  6. hazelcast的坑爹事
  7. 本科学位计算机要考吗,本科毕业需要考计算机二级吗
  8. java生成二维码技术实现
  9. matlab中函数功能汇总(一)——rectangle、bwlabel、regionprops
  10. excel合并同一目录下代码(多文件合并到同一个文件多Sheet下、多文件合并到同一个Sheet下)