数据格式:
cmt_id: 影评ID编号, 主键
cmt_cont: 未切割影评数据(原始影评数据)
cmt_star: 评分(星数)
cmt_time: 发布时间
cmt_user: 发布者url
cmt_thumbs: 评论点赞数

评论星数
评论星数在html网页dom结构中对应的标签:<span class="allstar20 rating" title="较差"></span>
星数的映射关系为:
1颗星:很差
2颗星:较差
3颗星:还行
4颗星:推荐
5颗星:力荐
抽取过程中,将以数字代表星数,不记录文字表述

项目构建步骤
一、 利用virtualenv创建虚拟沙盒
mkdir DouBanMovieProVenv
virtualenv —distribute DouBanMovieProVenv/
cd DouBanMovieProVenv/
# 启动虚拟环境
source bin/activate  
二、安装依赖包
pip install scrapy
pip install pymongo
pip install beautifulsoup4
三、创建scrapy项目
创建scrapy项目, 用来实现影评数据的抓取
scrapy start project JediEscapePro

四 、撸代码啦
scrapy爬虫构建过程:
scrapy项目过程分为四个模块, 即分别定义item, spider, pipeline, settings
1、定义item
item项对应影评数据结构,基本就是你要从抓取的网页中提取的元数据, 实际上就是一个comment对象
item :
--- cmt_id
--- cmt_cont
--- cmt_star
--- cmt_time
--- cmt_user
--- cmt_thumbs

2、抓取网页,提取item元数据
通过对影评html网页的分析,发现每条影评对应一个div[@class="comment-item"]标签,该标签中包含了我们需要提取的各个item项,对应关系如下:
--- cmt_id: 对应div标签的data-cid属性值
--- cmt_cont:div标签的子标签p的text值
--- cmt_star:span[@class='comment-info']的子标签span的title属性值
--- cmt_time:span[@class='comment-info']的子标签span的text值,直接用正则匹配re("\d{4}-\d{2}-\d{2}")[0]
--- cmt_user:span[@class='comment-info']的子标签a的href属性值
--- cmt_thumbs:span[@class='comment-vote']的子标签span的文本值
得出各个item项对应的标签元素,利用xpath进行索引,获取元素信息。xpath的内容请参考:http://www.w3school.com.cn/xpath/

3、定义pipeline
本项目使用面向文档的mongoDB数据库,方便以后影评数据字段的动态扩充。此处主要定义一些基本的增删改查操作,需要注意的是:
在抓取过程中,将通过已有记录实现重复记录的过滤,避免重复抓取。为了应对反爬虫,将对抓取频率进行限制,并可能多次抓取,在此过程中评论的点赞数
是可能更新的,因此将对cmt_thumbs实现实时更新。

4、settings设置
// 设置5秒内的随机延迟
DOWNLOAD_DELAY = 5  
RANDOMIZE_DOWNLOAD_DELAY = True
// 多个用户代理,随机切换
USER_AGENT_LIST =[...]
// 多个cookie,随机切换
COOKIES = [...]

5、反反爬虫策略
豆瓣影评数据未登陆状态下,只能抓取200条左右,因此探索过程中,采取了模拟表单登陆
1)表单提交登陆
form_data = {
'source': 'movie',
'redir': "https://movie.douban.com/subject/24529353/comments?start=20",
'form_email': 'your email',
'form_password': 'your password',
'remember': "on",
'login': "登录".decode("utf-8")
}
return [FormRequest.from_response(response,
meta={'cookiejar': response.meta['cookiejar']},
headers=self.headers,
formdata=form_data,
callback=self.after_login,
dont_filter=True)]
表单登陆能够成功,仅限于未出现验证码的情况,有验证码后,尝试过假如验证码信息,但未成功,也尝试过识别验证码,效果不佳。
2) 带cookie请求,模拟登陆
因此,选择了带cookie请求的方式:首先,利用firefox从浏览器端正常登陆豆瓣,登陆成功后获取到当前cookie信息,拷贝到settings中的COOKIES。
在请求网页时,采用如下方式,带上cookie信息,就可以正常请求了:
for url in response.xpath("//a[@class='next']/@href").extract():
yield Request('https://movie.douban.com/subject/24529353/comments'+url,
callback=self.parse, cookies=random.choice(COOKIES))
response.xpath(...)提取的下一页的链接。

6、评论者信息抓取
对于评论者信息的抓取,简单采用urlli2模块即可,url来源于cmt_user。抓取过程中,同样带上cookie信息。抓取的数据项包括:
url: 用户主页链接(已有)
area: 用户所属地区,如“江苏南京”
join_time: 用户注册时间
nick_name: 用户昵称

7、数据简单分析
对所获取的影评数据从评星数,相关星级点赞数两个方面进行统计分析,如下:


可以看出,该片整体市场反应一般,评分不高
对抓取得到的一万多个用户数据进行分析,得出这些用户共来自于国内外的520的区域,占有率较高的前15个区域人数和占比如下:
用户相关:
total area is: 520
area -> counts: None, 2111 // 用户注册未登录区域信息可能
area -> counts: 北京, 1323
area -> counts: 上海, 878
area -> counts: 四川成都, 490
area -> counts: 广东广州, 483
area -> counts: 浙江杭州, 409
area -> counts: 湖北武汉, 347
area -> counts: 广东深圳, 345
area -> counts: 江苏南京, 289
area -> counts: 重庆, 283
area -> counts: 陕西西安, 262
area -> counts: 湖南长沙, 241
area -> counts: 天津, 184
area -> counts: 江苏苏州, 155
area -> counts: 河南郑州, 135

8、词云展现
对所有影评数据做分词、去停用词处理,去掉词长为1的词,获取词频统计信息后,得出的词云如下:


五、解决的问题
1、 403错误
定义UserAgent, request带cookie
cookie的获取:
首先,用自己的账号登陆,利用google chrome 或者 firefox 得到cookie信息, 将 cookie拷贝到本地,防置在request中, 如下:
for url in response.xpath("//a[@class='next']/@href").extract():
yield Request('https://movie.douban.com/subject/24529353/comments'+url, callback=self.parse, cookies=cookie)

2、 未登录抓取有限
模拟cookie登录
3、 模拟表单提交登录
表单提交登陆,在有验证码时登陆未成功,不知道什么问题
form_data = {
'source': 'movie',
'redir': "https://movie.douban.com/subject/24529353/comments?start=20",
'form_email': 'your email',
'form_password': 'your password',
'remember': "on",
'login': "登录".decode("utf-8")
}
return [FormRequest.from_response(response,
meta={'cookiejar': response.meta['cookiejar']},
headers=self.headers,
formdata=form_data,
callback=self.after_login,
dont_filter=True)]
4、解决验证码问题
ocr验证码识别,但未成功

5、wordcloud词云显示中文乱码
wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring, max_font_size=40,
random_state=42, font_path="/Library/Fonts/Kaiti.ttc")
加入font_path,指向本地系统的楷体字体路径(mac os)

豆瓣影评数据抓取与简要分析相关推荐

  1. 豆瓣书籍数据抓取(学习笔记)

    axios和cheerio 例子,对豆瓣推荐的书籍进行数据抓取,url:https://book.douban.com/latest const axios = require('axios').de ...

  2. 网络数据抓取赋能商业分析与业务增长

    互联网上存在海量数据.如何将这些零散的数据抓取下来,存储在公司数据库中?如何从数据中挖掘价值,以洞察市场发展方向,助力业务不断增长? 本文将分享几种常见的网络数据抓取方法,并展示多个真实的数据应用实例 ...

  3. 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

    目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 数据获取 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 数据导入及环境配置 Flume介绍 Hive介绍 MySQL介绍 ...

  4. python爬虫之Ajax动态加载数据抓取--豆瓣电影/腾讯招聘

    动态加载数据抓取-Ajax 特点 1.右键 -> 查看网页源码中没有具体数据 2.滚动鼠标滑轮或其他动作时加载 抓取 1.F12打开控制台,页面动作抓取网络数据包 2.抓取json文件URL地址 ...

  5. 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax

    文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...

  6. python豆瓣影评_使用Python抓取豆瓣影评数据的方法

    抓取豆瓣影评评分 正常的抓取 分析请求的url https://movie.douban.com/subject/26322642/comments?start=20&limit=20& ...

  7. 《流浪地球》影评数据爬取分析

    <流浪地球>影评数据爬取分析 人生苦短,我用Python. 阿巴阿巴阿巴,爬虫初学者,志在记录爬虫笔记,交流爬虫思路. 话不多说,开始进行操作. 对于电影数据影评的爬取,这里选取的网站是豆 ...

  8. 基于selenium+scrapy爬取复仇者联盟4豆瓣影评数据

    基于selenium+scrapy爬取复仇者联盟4豆瓣影评数据 参考资料: 黑马程序员爬虫教程 静觅爬虫教程 mac下anaconda安装selenium+PhantomJS scrapy下载中间件结 ...

  9. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

最新文章

  1. pythonrequest方法_解决Python requests 报错方法集锦
  2. 五、单向环形链表---实现约瑟夫(Josephu)问题
  3. Eclipse高版本无法兼容FatJar的问题解决
  4. 【docker】常用docker命令,及一些坑
  5. 深入理解 ASP.NET 动态控件 (Part 5 - 编译实验)
  6. 苹果备忘录怎么调字体大小_苹果手机的备忘录怎么恢复?不知道的快来看看
  7. Deciding the Number of Clusterings
  8. Soar:一款 Web 可视化的 SQL 优化工具
  9. Matlab 除法取整
  10. 感谢蜂窝教育,四个月的学习,让我改变了
  11. Apple EDI X12 业务报文解析(一)—— 850采购订单
  12. PostgreSql扩展(EXTENSION )
  13. 制造业MES系统数字化转型
  14. vue 使用pug(详细说明)
  15. php获取时间星期几,php 获取当天或某个日期是星期几
  16. uniapp移除原生导航栏后页面与手机状态栏重叠问题
  17. Ableton Live 11 Suite v11.1.0 WiN-MAC 电音制作宿主软件
  18. 有哪些有效解决程序员中年危机的方法?
  19. 【Python自动化测试8】流程控制语句讲解
  20. 拜托周杰伦,请不要强奸霍元甲!

热门文章

  1. 这4个行业用进销存管理系统是肯定不会错的
  2. 华为服务器万兆网卡驱动型号,思科华为常见的10G万兆光模块型号汇总与解析
  3. freeswitch 会议室录音文件时长小于会议室时长
  4. 猪齿鱼数智化效能平台亮相 2021 中国开源年会
  5. 移动端基础及响应式布局
  6. 查询关键字并显示标红(html+js)
  7. IC验证培训——SV通用库共享
  8. [ANOJ]1022库洛值[字符串处理].cpp
  9. metasploit基础命令操作
  10. 智能优化算法:浣熊优化算法-附代码