上期为你们介绍了requests库的基本信息以及使用requests库爬取某东的商品页,收到了不少同窗的反馈说期待猪哥的更新,猪哥感到很是开心,今天就带你们来玩一把刺激的!前端
在实际开发过程当中,在咱们动手开发以前,都是由产品经理为咱们(测试、前端、后端、项目经理等)先讲解一下需求,咱们了解了需求以后,才开始一块儿来讨论技术方案。
咱们本身实现一些小功能时一样须要讨论需求,也就是告诉别人咱们为何要作这个东西?或者咱们想利用这款产品解决什么问题。vue
咱们经常看到一些有关充气娃娃的表情包和图片或新闻,可是这种东西不多会像一些小视频一些相互交流,你们可能都是偷摸玩耍。因此猪哥相信其实大部分同窗并无亲身体验过充气娃娃究竟是什么感受(包括猪哥),因此猪哥很好奇到底是什么一种体验?真的如传言中那样爽吗?web
基于不少人没有体验过充气娃娃是什么感受,可是又很好奇,因此但愿经过爬虫+数据分析的方式直观而真是的告诉你们(下图为成品图)。数据库
为了实现上面的需求以及功能,咱们来讨论下具体的技术实现方案:编程
上篇文章中就给你们说过,今天咱们以某东商品编号为:1263013576的商品为对象,进行数据分析,咱们来看看详细的技术实现步骤吧!json
本教程只为学习交流,不得用于商用获利,后果自负!
若有侵权或者对任何公司或我的形成不利影响,请告知删除后端
第一步:打开某东的商品页,搜索你想研究的商品。
第二步:咱们在页面中鼠标右键选择检查(或F12)调出浏览器的调试窗口。
第三步:调出浏览器后点击评论按钮使其加载数据,而后咱们点击network查看数据。
第四步:查找加载评论数据的请求url,咱们可使用某条评论中的一段话,而后在调试窗口中搜索。
通过上面4步分析,咱们就拿到了京东评论数据的接口:https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4654&productId=1263013576&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1跨域
productPageComments:看这个名字就知道是产品页评论数组
拿到评论数据接口url以后,咱们就能够开始写代码抓取数据了。通常咱们会先尝试抓取一条数据,成功以后,咱们再去分析如何实现大量抓取。浏览器
上一篇咱们已经讲解了如何使用requests库发起http/s请求,咱们来看看代码
可是在打印的结果中数据倒是空?为什么浏览器请求成功,而咱们的代码却请求不到数据呢?难道咱们遇到了反扒?这种状况下如何解决?
你们在遇到这种状况时,回到浏览器的调试窗口,查看下浏览器发起的请求头,由于可能浏览器请求时携带了什么请求头参数而咱们代码中没有。
果真,咱们在浏览器头中看到了有两个请求头Referer和User-Agent,那咱们先把他们加到代码的请求头中,再试试!
咱们对爬取的数据分析发现,此数据为jsonp跨域请求返回的json结果,因此咱们只要把前面的fetchJSON_comment98vv4646(
和最后的)
去掉就拿到json数据了。
将json数据复制到json格式化工具中或者在Chrome浏览器调试窗口点击Preview
也能够看到,json数据中有一个key为comments
的值即是咱们想要的评论数据。
咱们再对comments值进行分析发现是一个有多条数据的列表,而列表里的每一项就是每一个评论对象,包含了评论的内容,时间,id,评价来源等等信息,而其中的content
字段即是咱们在页面看到的用户评价内容。
那咱们来用代码将每一个评价对象的content
字段提取并打印出来
数据提取后咱们须要将他们保存起来,通常保存数据的格式主要有:文件、数据库、内存这三大类。今天咱们就将数据保存为txt文件格式,由于操做文件相对简单同时也能知足咱们的后续数据分析的需求。
而后咱们查看一下生成的文件内容是否正确
再完成一页数据爬取、提取、保存以后,咱们来研究一下如何批量抓取?
作过web的同窗可能知道,有一项功能是咱们必需要作的,那即是分页。何为分页?为什么要作分页?
咱们在浏览不少网页的时候经常看到“下一页”这样的字眼,其实这就是使用了分页技术,由于向用户展现数据时不可能把全部的数据一次性展现,因此采用分页技术,一页一页的展现出来。
让咱们再回到最开始的加载评论数据的url:
咱们能够看到连接里面有两个参数page=0&pageSize=10,page表示当前的页数,pageSize表示每页多少条,那这两个数据直接去数据库limit数据。
老司机一眼即可以看出这就是分页的参数,可是有同窗会说:若是我是老司机还干吗看你的文章?因此我教你们如何来找到这个分页参数。
回到某东的商品页,咱们将评价页面拉到最底下,发现有分页的按钮,而后咱们在调试窗口清空以前的请求记录。
清空以前的请求记录以后,咱们点击上图红框分页按钮的数字2,表明这第二页,而后复制第一条评价去调试窗口搜索,最后找到请求连接。
而后咱们点击Headers
查看第二页请求数据的url
而后咱们比较第一页评价与第二页评价的url有何区别
这里也就验证了猪哥的猜测:page表示当前的页数,pageSize表示每页多少条。并且咱们还能得出另外一个结论:第一个page=0,第二页page=1 而后依次日后。有同窗会问:为何第一页不是1,而是0,由于在数据库中通常的都是从0开始计数,编程行业不少数组列表都是从0开始计数。
好了,知道分页规律以后,咱们只要在每次请求时将page参数递增不就能够批量抓取了吗?咱们来写代码吧!
简单讲解一下作的改动:
爬取完成以后检查成果
数据成功保存以后咱们须要对数据进行分词清洗,对于分词咱们使用著名的分词库jieba。
首先是安装jieba库:
pip3 install jieba
固然这里你还能够对一些介词等无效词进行剔除,这样能够避免无效数据。
生成云词咱们须要用到numpy
、matplotlib
、wordcloud
、Pillow
这几个库,你们先自行下载。matplotlib
库用于图像处理,wordcloud
库用于生成词云。
注意:font_path是选择字体的路径,若是不设置默认字体可能不支持中文,猪哥选择的是Mac系统自带的宋体字!
最终结果:
咱们来看看全代码:
因考虑新手的友好性,文章篇幅较长,详细的介绍了从需求到技术分析、爬取数据、清洗数据、最后的分析数据。咱们来总结一下本片文章学到的东西吧:
这是一套完整的数据分析案例,但愿你们能本身动手尝试,去探索更多有趣的案例,作个有趣的人~
获取源码,扫描下方二维码关注微信公众号「裸睡的猪」,回复:京东商品评价