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

news/2024/7/7 21:33:57

640?wx_fmt=jpeg


作者 | 猪哥

来源 | 裸睡的猪(ID:IT--Pig


导语】:之前为大家介绍了 requests 库的基本信息以及使用方法,收到了很多同学的反馈,期待作者新作,今天不负所望,作者就带大家来玩一把刺激的。


一、需求背景


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


640?wx_fmt=png


我们自己实现一些小功能时同样需要讨论需求,也就是告诉别人我们为什么要做这个东西?或者我们想利用这款产品解决什么问题。


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


二、功能描述


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


640?wx_fmt=png


三、技术方案


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


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

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

  3. 使用词云做数据展示


四、技术实现


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


本教程只为学习交流,不得用于商用获利,后果自负!
如有侵权或者对任何公司或个人造成不利影响,请告知删除


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


第一步:打开某东的商品页,搜索你想研究的商品。


640?wx_fmt=png


第二步:我们在页面中鼠标右键选择检查(或F12)调出浏览器的调试窗口。


640?wx_fmt=png


第三步:调出浏览器后点击评论按钮使其加载数据,然后我们点击network查看数据。


640?wx_fmt=png


第四步:查找加载评论数据的请求url,我们可以使用某条评论中的一段话,然后在调试窗口中搜索。


640?wx_fmt=png
640?wx_fmt=png


经过上面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:看这个名字就知道是产品页评论


2.爬取评论数据


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


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


640?wx_fmt=png


但是在打印的结果中数据却是空?为何浏览器请求成功,而我们的代码却请求不到数据呢?难道我们遇到了反爬?这种情况下如何解决?


大家在遇到这种情况时,回到浏览器的调试窗口,查看下浏览器发起的请求头,因为可能浏览器请求时携带了什么请求头参数而我们代码中没有。


640?wx_fmt=png


果然,我们在浏览器头中看到了有两个请求头 Referer 和 User-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=png


我们再对comments值进行分析发现是一个有多条数据的列表,而列表里的每一项就是每个评论对象,包含了评论的内容,时间,id,评价来源等等信息,而其中的content字段便是我们在页面看到的用户评价内容。


640?wx_fmt=png


那我们来用代码将每个评价对象的content字段提取并打印出来。


640?wx_fmt=png


4.数据保存


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


640?wx_fmt=png


然后我们查看一下生成的文件内容是否正确。


640?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=png


清空之前的请求记录之后,我们点击上图红框分页按钮的数字2,代表这第二页,然后复制第一条评价去调试窗口搜索,最后找到请求链接。


640?wx_fmt=png


然后我们点击Headers查看第二页请求数据的url


640?wx_fmt=jpeg


然后我们比较第一页评价与第二页评价的url有何区别。


640?wx_fmt=png


这里也就验证了猪哥的猜想:page表示当前的页数,pageSize表示每页多少条。而且我们还能得出另一个结论:第一个page=0,第二页page=1 然后依次往后。有同学会问:为什么第一页不是1,而是0,因为在数据库中一般的都是从0开始计数,编程行业很多数组列表都是从0开始计数。


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


640?wx_fmt=png


简单讲解一下做的改动:


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

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

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


爬取完成之后检查成果。


640?wx_fmt=png


6.数据清洗


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


首先是安装jieba库:

pip3 install jieba

640?wx_fmt=png


当然这里你还可以对一些介词等无效词进行剔除,这样可以避免无效数据。


7.生成词云


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


640?wx_fmt=png

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


最终结果:
640?wx_fmt=jpeg

我们来看看全代码


640?wx_fmt=png


五、总结


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


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

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

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

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

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

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

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


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


项目地址:

https://github.com/pig6/jd_comment_spider


(*本文为 AI科技大本营转载文章,转载请联系原作者


精彩推荐



“只讲技术,拒绝空谈”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。


目前,大会盲订票限量发售中~扫码购票,领先一步!

                       

640?wx_fmt=jpeg

推荐阅读

  • 腾讯拥抱开源:首次公布开源路线图,技术研发向共享、复用和开源迈进

  • 干货 | 20个教程,掌握时间序列的特征分析(附代码)

  • 长点心吧年轻人,利率不是这么算的!我用Python告诉你亏了多少!

  • 一文看懂数据清洗:缺失值、异常值和重复值的处理

  • Libra 骗局来了! 受害者会是你吗?

  • 那个裸辞的程序员,后来怎么样了?

  • FreeWheel是一家怎样的公司?| 人物志

  • Mac 被曝存在恶意漏洞:黑客可随意调动摄像头,波及四百万用户!

  • 文末送书啦!| Device Mapper,那些你不知道的Docker核心技术

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

http://lihuaxi.xjx100.cn/news/281765.html

相关文章

2021研究生报告新鲜出炉!博士每年招生超10万人

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google C项目编程风格指南 (中文版) 分享来源:中国教育在线、教育部编辑:学长&#x…

vb科学计算机x y,vb程序用vb实现系统的计算器功能1/x,sqrt,%,+/-, 爱问知识人

dim v as boolendim s as integerdim x as doubledim y as doubleprivate sub command1_click(index as integer)if form1。tag"t" thenif index10 thentext1。text"0。"elsetext1。textcommand1(index)。captionend ifform1。tag""else text1。…

mysql 安装与常用命令

mysql安装方式主要用yum、rpm、编译、二进制。yum和rpm安装方式类似,安装速度快,yum更能解决安装过程中的依赖包问题;编译安装时间长,但此安装方式能根据自己的环境定制安装选项功能模块;二进制安装安装速度快&#xf…

JSON端口操作实例

JSON 端口可直接实现在 JSON 和 XML 之间进行转换。端口会自动检测输入文件是 JSON 还是 XML,然后将文件在两种格式间相互转换。 该端口较多的是运用在API接口调用集成方案的项目当中,我们以百思买项目为例,知行之桥将接收到的百思买的EDI报…

C#变量

大家好,我是denylau,今天很郁闷了,本来整理了好多关于变量的咨询眼看就要写完了,电脑出现异常,所有的一切白做了,这个我时候我就纳闷了,为什么blog在发表文章前的写的这么多的东西我无法暂存起来…

基于Erlang语言的视频相似推荐系统 | 深度

作者丨gongyouliu来源 | 转载自大数据与人工智能(ID:ai-big-data)【导语】:作者在上一篇文章《基于内容的推荐算法》中介绍了基于内容的推荐算法的实现原理。在本篇文章中作者会介绍一个具体的基于内容的推荐算法的实现案例。该案例是作者在2…

OpenCV还能实现这种效果? | 视频防抖技术

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google C项目编程风格指南 (中文版) 分享转自|小白玩转Python这篇文章分享了一个视频防抖的策略,…

大热下的 GNN 研究面临哪些“天花板”?未来的重点研究方向又在哪?

来源:AI科技评论本文约3575字,建议阅读11分钟。本文介绍强大的 WL 算法对于聚合函数的单射性质有很强的要求,那么强大的 GNN 应该具备哪些性质呢?研究大热下, GNN 面临哪些“天花板”?未来的重点研究方向又…