充气娃娃什么感觉?Python告诉你

一、需求背景

在实际开发过程中,在我们动手开发之前,都是由产品经理为我们(测试、前端、后端、项目经理等)先讲解一下需求,我们了解了需求之后,才开始一起来讨论技术方案。640?wx_fmt=png

我们常常看到一些有关充气娃娃的表情包和图片或新闻,但是这种东西很少会像一些小视频一些相互交流,大家可能都是偷摸玩耍。所以猪哥相信其实大部分同学并没有亲身体验过充气娃娃到底是什么感觉(包括猪哥),所以猪哥很好奇究竟是什么一种体验?真的如传言中那样爽吗?640?wx_fmt=jpeg

二、功能描述

基于很多人没有体验过充气娃娃是什么感觉,但是又很好奇,所以希望通过爬虫+数据分析的方式直观而真实的告诉大家(下图为成品图)。640?wx_fmt=png

三、技术方案

为了实现上面的需求以及功能,我们来讨论下具体的技术实现方案:

  1. 分析某东评论数据请求

  2. 使用requests库抓取某东的充气娃娃评论

  3. 使用词云做数据展示

四、技术实现

上篇文章中就给大家说过,今天我们以某东商品编号为:1263013576的商品为对象,进行数据分析,我们来看看详细的技术实现步骤吧!

本教程只为学习交流,不得用于商用获利,后果自负!

1.分析并获取评论接口的URL

第一步:打开某东的商品页,搜索你想研究的商品。640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png

productPageComments:看这个名字就知道是产品页评论

2.爬取评论数据

拿到评论数据接口url之后,我们就可以开始写代码抓取数据了。一般我们会先尝试抓取一条数据,成功之后,我们再去分析如何实现大量抓取。

上一篇我们已经讲解了如何使用requests库发起http/s请求,我们来看看代码640?wx_fmt=png

大家在遇到这种情况时,回到浏览器的调试窗口,查看下浏览器发起的请求头,因为可能浏览器请求时携带了什么请求头参数而我们代码中没有。640?wx_fmt=pngRefererUser-Agent,那我们先把他们加到代码的请求头中,再试试!640?wx_fmt=png

3.数据提取

我们对爬取的数据分析发现,此数据为jsonp跨域请求返回的json结果,所以我们只要把前面的fetchJSON_comment98vv4646(和最后的)去掉就拿到json数据了。

640?wx_fmt=jpeg

将json数据复制到json格式化工具中或者在Chrome浏览器调试窗口点击Preview也可以看到,json数据中有一个key为comments的值便是我们想要的评论数据。640?wx_fmt=pngcontent字段便是我们在页面看到的用户评价内容。640?wx_fmt=pngcontent字段提取并打印出来640?wx_fmt=png

4.数据保存

数据提取后我们需要将他们保存起来,一般保存数据的格式主要有:文件、数据库、内存这三大类。今天我们就将数据保存为txt文件格式,因为操作文件相对简单同时也能满足我们的后续数据分析的需求。640?wx_fmt=png640?wx_fmt=png

5.批量爬取

再完成一页数据爬取、提取、保存之后,我们来研究一下如何批量抓取?

做过web的同学可能知道,有一项功能是我们必须要做的,那便是分页。何为分页?为何要做分页?

我们在浏览很多网页的时候常常看到“下一页”这样的字眼,其实这就是使用了分页技术,因为向用户展示数据时不可能把所有的数据一次性展示,所以采用分页技术,一页一页的展示出来。

让我们再回到最开始的加载评论数据的url:

https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv4654&productId=1263013576&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1

我们可以看到链接里面有两个参数page=0&pageSize=10,page表示当前的页数,pageSize表示每页多少条,那这两个数据直接去数据库limit数据。

老司机一眼便可以看出这就是分页的参数,但是有同学会说:如果我是老司机还干嘛看你的文章?所以我教大家如何来找到这个分页参数

回到某东的商品页,我们将评价页面拉到最底下,发现有分页的按钮,然后我们在调试窗口清空之前的请求记录。640?wx_fmt=png640?wx_fmt=pngHeaders查看第二页请求数据的url

640?wx_fmt=jpeg

然后我们比较第一页评价与第二页评价的url有何区别640?wx_fmt=png

好了,知道分页规律之后,我们只要在每次请求时将page参数递增不就可以批量抓取了吗?我们来写代码吧!640?wx_fmt=png

  1. spider_comment方法增加入参page

    页数,然后在url中增加占位符,这样就可以动态修改url,爬取指定的页数。

  2. 增加一个batch_spider_comment方法,循环调用spider_comment方法,暂定爬取100页。

  3. batch_spider_comment方法的for循环中设置了一个随机的休眠时间,意在模拟用户浏览,防止因为爬取太频繁被封ip。

爬取完成之后检查成果640?wx_fmt=png

6.数据清洗

数据成功保存之后我们需要对数据进行分词清洗,对于分词我们使用著名的分词库jieba

pip3 install jieba

640?wx_fmt=png

7.生成词云

生成词云我们需要用到numpymatplotlibwordcloudPillow这几个库,大家先自行下载。matplotlib库用于图像处理,wordcloud库用于生成词云。

640?wx_fmt=png

注意:font_path是选择字体的路径,如果不设置默认字体可能不支持中文,猪哥选择的是Mac系统自带的宋体字!

最终结果:640?wx_fmt=jpeg

640?wx_fmt=png

五、总结

因考虑新手的友好性,文章篇幅较长,详细的介绍了从需求到技术分析、爬取数据、清洗数据、最后的分析数据。我们来总结一下本篇文章学到的东西吧:

  1. 如何分析并找出加载数据的url

  2. 如何使用requests库的headers解决RefererUser-Agent反扒技术

  3. 如何找出分页参数实现批量爬取

  4. 设置一个爬虫间隔时间防止被封ip

  5. 数据的提取与保存到文件

  6. 使用jieba库对数据分词清洗

  7. 使用wordcloud生成指定形状的词云

这是一套完整的数据分析案例,希望大家能自己动手尝试,去探索更多有趣的案例,做个有趣的人~

640?wx_fmt=jpeg

项目地址(或点击阅读原文):https://github.com/pig6/jd_comment_spider

点击阅读原文可直达GitHub。

【完】


640?wx_fmt=gif

640?wx_fmt=png

喜欢就点击“在看”

文章来源: blog.csdn.net,作者:敲代码的灰太狼,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/tongtongjing1765/article/details/100582089

(完)