前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 胡萝卜酱

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

爬虫

首先笔者定位为成都,美食类型选的“火锅”,火锅具体类型选的不限,区域选的不限,排序选的智能,如图:

你也可以选择别的选项,只是注意URL的变化。本文都是按照上述选项爬取的数据。接下来翻页观察一下URL的变化:

第二页:

第三页:

很容易观察出翻页变化的知识p后面的数字,倒推回第一页,发现一样的显示内容,因此,写一个循环,便可以爬取全部页面。

但是大众点评只提供了前50页的数据,所以,我们也只能爬取前50页。

这一次,笔者用的pyquery来分析网页的,所以我们需要定位到我们所爬取的数据的位置,如图:

在具体分析的网页的时候,我震惊了,大众点评的反爬做的太过分了,它的数字,一些文字居然都不是明文显示,而是代码,你还不知道怎么分析它。如图:

很烦的,一些文字又可以显示,一些又用代码表示。一些数字也是,不过好一点的是数字只有9个,只要稍微观察一下,就能发现数字的代码是什么了。这里笔者列出来了。 {'hs-OEEp': 0, 'hs-4Enz': 2, 'hs-GOYR': 3, 'hs-61V1': 4, 'hs-SzzZ': 5, 'hs-VYVW': 6, 'hs-tQlR': 7, 'hs-LNui': 8, 'hs-42CK': 9}。值得注意的是,数字1,是用明文表示的。

那么,如何用pyquery来定位呢,很简单,你找到你要获取的数据,然后右键→copy→cut selector,你复制到代码里面就OK了。pyquery的具体用法百度既有。

最后,我们获取了火锅50个页面的数据,每页15个数据,一共750家餐厅的数据。

分析

大众点评已经给出了星级评价,可以看看大致趋势。

准五星商户最多,可能因为大部分食客都习惯给好评,只有实在不满时才会打出低评有关,造成了评级一般不低,但近满分还是蛮少的。

在本文,我们假设评论数目为饭店的热度,也就是它越火,评论数目越多。

评论数目大多在1000以内,但是高于2000,甚至高于4000也还存在一些,这些饭店应该是一些网红店。以5000为约束,筛选出饭店均为小龙坎、蜀大侠都非常知名的火锅店。那么评论数量和星级有关系吗?看下图:

这里取其评论数平均值,发现对于四星以上商户来说,评论数和星级并不关系,但均比低于四星的饭店销量更好。这说明在四星以上之后,人们选择差别不大,但一般不愿意接受评论太差的饭店。

对于笔者这样的学生党来说,影响较大还有人均消费情况。

成都的火锅店人均消费大部分都在50-100的区间内,高于150的也有一些。对于笔者来讲,吃一顿火锅,人均在50-100是可以接受的,高于100,就要低头看看钱包了()。那扩展看,人均消费和星级、评论数量有关系吗?

上图是人均消费和星级的关系,看起来并无任何关系,那说明一些口碑好的火锅店,其实人均也不贵。下面看看人均和评论数目的关系吧。

通过比较,发现评论数目低于500,人均在50-100区间是最多的。当然这肯定和评论数量、人均消费本身集中于这一阶段有关。

吃火锅,一家店的生意好坏,肯定还和它的特色菜有关,笔者通过jieba分词,将爬取到的推荐菜做了一个词云图,如下。

笔者最爱的牛肉是特色菜之最啊,尤其是麻辣牛肉,只要去吃火锅,都要来上一份,其次是毛肚、虾滑、鹅肠等等。

接下来是大家都关心的,口味、环境和服务的情况。

三者得分大多都是集中在8.0-9.2这一阶段,笔者认为,低于7.5分的饭店还是不要去尝试了。同时,星级评价应该也是由这三者得分产生的。

果然如预想的一向,星级评价越好,它在口味、环境和服务的得分越高。那么口味,环境,服务得分与评论数量,平均价格有关系吗?

如图所看,并无什么直接关系,但是我们发现口味、环境和服务三者之间存在着非常好的线性关系,于是单独拿出来画了一个较大的图。

我们并且拟合了线性关系,由于三星商户只有一家,它的情况较为特殊之外,其他星级在口味、环境和服务的关系拟合中保持的相当一致,这也证明我们的猜想,这些变量之间存在线性关系。鉴于笔者本文最大的目的是做推荐,于是,我们进行了K-means聚类,这里取K为3,并且把星级转换为数字,五星对应5分,准五星对应4.5分,以此类推。最终得到了三类,通过作图,看看聚类情况如何吧。

和我们想要的结果一致,在口味、环境、服务和星级上得分越高,我们就越推荐。然而推荐的店铺还是好多,能不能在集中一些呢?于是通过限制评论数量、人均消费和特色菜来进行推荐。由于笔者喜欢人少,便宜还有牛肉的店铺,这里得到了如下的结果:

代码

1 importtime2 importrequests3 from pyquery importPyQuery as pq4 importpandas as pd5 ​6 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}7 ​8 defrestaurant(url):9 #获取网页静态源代码

10 try:11 response = requests.get(url, headers=headers)12 if response.status_code == 200:13 returnresponse.text14 exceptException:15 returnNone16 ​17 name=[]18 url =[]19 star =[]20 comment =[]21 avg_price =[]22 taste =[]23 environment =[]24 services =[]25 recommend =[]26 ​27 num = {'hs-OEEp': 0, 'hs-4Enz': 2, 'hs-GOYR': 3, 'hs-61V1': 4, 'hs-SzzZ': 5, 'hs-VYVW': 6, 'hs-tQlR': 7, 'hs-LNui': 8, 'hs-42CK': 9}28 defdetail_number(htm):29 try:30 a =str(htm)31 a = a.replace('1<', '<')32 a = a.replace('.', '')33 b =pq(a)34 cn = b('span').items()35 number = ''

36 for i incn:37 attr = i.attr('class')38 if attr innum:39 attr =num[attr]40 number = number +str(attr)41 number = number.replace('None', '')42 except:43 number = ''

44 returnnumber45 ​46 definfo_restaurant(html):47 #获取饭店的名称和链接

48 doc =pq(html)49 for i in range(1,16):50 #获取饭店名称

51 shop_name = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.tit > a:nth-child(1) > h4').text()52 if shop_name == '':53 break

54 name.append(shop_name)55 #获取饭店链接

56 url.append(doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.pic > a').attr('href'))57 try:58 star.append(doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.comment > span').attr('title'))59 except:60 star.append("")61 #获取评论数量

62 comment_html = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.comment > a.review-num > b')63 comment.append(detail_number(comment_html))64 #获取人均消费

65 avg_price_html = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.comment > a.mean-price > b')66 avg_price.append(detail_number(avg_price_html))67 #获取口味评分

68 taste_html = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > span > span:nth-child(1) > b')69 taste.append(detail_number(taste_html))70 #获取环境评分

71 environment_html = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > span > span:nth-child(2) > b')72 environment.append(detail_number(environment_html))73 #获取服务评分

74 services_html = doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > span > span:nth-child(3) > b')75 services.append(detail_number(services_html))76 #推荐菜,都是显示三道菜

77 try:78 recommend.append(doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.recommend > a:nth-child(2)').text()+str(',')+\79 doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.recommend > a:nth-child(3)').text()+str(',')+\80 doc('#shop-all-list > ul > li:nth-child('+str(i)+') > div.txt > div.recommend > a:nth-child(4)').text())81 except:82 recommend.append("")83 for i in range(1,51):84 print('正在获取第{}页饭店信息'.format(i))85 hotpot_url = 'http://www.dianping.com/chengdu/ch10/g110p'+str(i)+'?aid=93195650%2C68215270%2C22353218%2C98432390%2C107724883&cpt=93195650%2C68215270%2C22353218%2C98432390%2C107724883&tc=3'

86 html =restaurant(hotpot_url)87 info_restaurant(html)88 print ('第{}页获取成功'.format(i))89 time.sleep(12)90 ​91 shop = {'name': name, 'url': url, 'star': star, 'comment': comment, 'avg_price': avg_price, 'taste': taste, 'environment': environment, 'services': services, 'recommend': recommend}92 shop = pd.DataFrame(shop, columns=['name', 'url', 'star', 'comment', 'avg_price','taste', 'environment', 'services', 'recommend'])93 shop.to_csv("shop.csv",encoding="utf_8_sig",index = False)

python爬取大众点评_Python 爬取大众点评 50 页数据,最好吃的成都火锅竟是它!...相关推荐

  1. python爬取大众点评数据_Python 爬取大众点评 50 页数据,最好吃的成都火锅竟是它!...

    作者 | 胡萝卜酱 责编 | 伍杏玲 成都到处都是火锅店,有名的店,稍微去晚一点,排队都要排好久,没听说的店,又怕味道不好. 那么如何选择火锅店呢?最简单的肯定是在美团.大众点评上找一找啊.所以,本文 ...

  2. python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  3. python爬虫知乎图片_python 爬取知乎图片

    先上完整代码 1 importrequests2 importtime3 importdatetime4 importos5 importjson6 importuuid7 from pyquery ...

  4. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  5. python 爬虫餐饮行业 数据分析_Python爬取美团美食板块商家数据

    导语 利用Python简单爬取美团美食板块商家数据... 其实一开始我是想把美团的所有商家信息爬下来的,这样就可以美其名曰百万数据了... 然而相信很多爬过美团的朋友都发现了... 如果不进行一些小操 ...

  6. python爬取豆瓣书籍_python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

  7. python开源代码百度盘_python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 代码片段import urllib import urllib.request import webbrowser import re def yun ...

  8. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  9. python爬取贴吧_Python爬取贴吧(简洁版)

    #encoding=utf-8 import urllib2,urllib class tieba: def tiebaSpider(self,name,starPage,endPage): #要爬取 ...

最新文章

  1. Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
  2. 关于Jquery中ajax方法data参数用法的总结
  3. oracle异机恢复 open resetlogs 报:ORA-00392
  4. thinkcmf 横向排列数据_利用python进行数据分析之数据清洗规整
  5. 关于Acess 图片存为ole类型,数据集合显示
  6. 物联网通信技术-概述
  7. 重新定义QLabel的clicked事件
  8. 【阅读笔记】联邦学习实战——用FATE从零实现横向逻辑回归
  9. 简单的走迷宫小游戏(C语言编写,无指针,无链表)
  10. XAVIER CMDS
  11. 【Linux】linux 终端报Message from syslogd
  12. hive 配置参数说明大全
  13. 大恒相机MER-302-56U3M在Linux环境下采集图像
  14. 招生1400名!这所985高校发布2023年博士研究生招生简章!
  15. 如何在Outlook中创建自定义导航窗格
  16. 使用树莓派搭建stm32开发环境
  17. flash游戏教程集锦~~制作游戏有疑惑的先来这里看看~~
  18. 从源码处理一理Retrofit的异步网络请求如何把结果切换到主线程
  19. html里th是什么单位,网页中的th/th是什么意思
  20. 陆金所8.4%投资项目真实收益计算

热门文章

  1. 2月券商App行情刷新及交易体验报告,东方与安信升至领导者象限
  2. 恶意网址virus.html,恶意样本查找
  3. python 与设计模式 ——工厂与单例
  4. Windows下基于嵌入式Eclipse + GDB + JLink 对JZ2440/S3C2440/mini2440 进行裸机程序在SDRAM上的调试
  5. Linux安装openssh协议遇到Package has no installation candidate问题解决方法——2015.06.26
  6. 微信开发者工具的快捷键
  7. python笔记:7.2.1一元单因素方差分析(例7-1像素影响数码相机销量)
  8. 重庆大学计算机学院可以直博吗,重庆大学2020年推免研究生(含直博生)拟录取名单统计分析...
  9. CreateCompatibleBitmap,关于兼容DC的创建与资源回收
  10. 谁是卧底java_TouchFired: TouchFired(被炒鱿鱼的边缘徘徊)基于Netty的《谁是卧底游戏》摸鱼程序。...