学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

放假啦放假啦,学妹要来北京玩,点名非要请她吃全聚德的烤鸭!我告诉他全聚德的烤鸭真的一般般,她说不信,来北京谁不知道要吃北京烤鸭。还说我请不起她,面对这样的姑娘我百口莫辩。于是我花了1个小时写了100行代码爬了烤鸭2000的多条数据,我们用数据说话,证明给她看!

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

1).网页分析

我选择爬取美团上全聚德的评价信息,来做一个数据分析。利用美团的智能排序,第一家是全聚德(天安门店)。

点击进去后,查看网页源代码,右键页面打开开发者模式,找到Network下的XHR,翻到下面的评论信息后,一直不断的翻页,就可以发现我们所要寻找的目标如图所示:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

2).查看url规则

它是一个get的请求方式,返回的是json数据。查看它的请求url,这么长的一串,通过观察发现,它的url很有规律,不同的请求url只是切换了offset而已,而offset指的是每切换一次页面时距离第一条评论的偏移量是多少。修改offset为10,20等10的倍数,一共有2070条。

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

1).爬取网页

首先是模拟浏览器来请求json数据。由于其并没有设置加密,所以我们采取用requests库进行求取,并用json来解析它所返回的信息。如果Ajax请求的url有加密的话,可以用selenium来搞定!由于评论最后一页的offset为2070,所以只需要不断的循环请求,便可以不断的得到json数据。

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

思路:

a).经过上面的网页分析,我们构造url的规律一共2070条,只要循环一下构造url的offset

b).因为没有加密直接requests获取json数据即可

c).爬取数据也要懂规矩,加一些延迟比较好

2).解析json数据

第二部分是对于json数据的解析,对于返回的json数据,直接利用json库来进行解析,并提取我们所需要的数据,这里我们一共提取了四项数据,包括用户名称、评分、 用户评价、 以及针对于每条评论被查看的人数。数据进行提取后被保存到了本地的csv文件夹下,代码如下图所示:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

1).我们一共爬取了2034条的评价,对数据简单的清洗去掉一些空的评论之后还有1500条左右,看一下爬取结果如下图所示:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

2).评分最高

看一下查看人数最多的评论前10条,发现评分都很高。而且字数也不少,那么字数多的评论是不是都是好评呢,我们继续探索

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

我们把字数也作为一个纬度,然后结合评分和阅读数进行分析:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

3).评分的饼图:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

从饼形图里可以看出,评价为五星和四星的还是占大多数,但是也存在相当比例的一星、二星和三星评价,说明大家对于全聚德并不全都是一致的好评。

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

差点忘记我们的目的了,我们是要看短评的内容分析,看看全聚德烤鸭到底好不好吃,大家的评论焦点是什么,词频如何:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

>>

全聚德词频统计结果
服务 ========== 755
烤鸭 ========== 471
味道 ========== 439
不错 ========== 422
好吃 ========== 331
一般 ========== 294
全聚德 =========233
就是 ========== 222
服务费 ========= 09
北京 ========== 207

制作的词云效果如下图:

学妹来北京想吃烤鸭,我写100行代码爬了两千个短评,就为了证明~

从词云可以看出,对于北京全聚德烤鸭的整体评价还是不错的,但是也存在“一般”,“服务费”,“服务态度”这样的高频词汇。服务费确实伤不起啊,分析完这些数据之后,我也服了,咬咬牙我还是掏腰包带她去吃烤鸭吧。

猜你喜欢

转载自blog.csdn.net/saltish1/article/details/89680829
今日推荐