今天收到一个消息,阿里95亿美元拿下饿了么。阿里巴巴已经签订收购协议,联合蚂蚁金服用95亿美元兑饿了么全资收购。现在我用Python抓取饿了么的外卖数据。

■1、环境介绍:

win10 64bit

python 3.6.0

openpyxl 2.4.2(操作excel)

■、目的

根据区域统计该区域附近的外卖商家总数、和所有商家的月销售情况

■3、网页截图

首先我们通过这张图能发现

URL请求是:https://mainsite-restapi.ele.me/v2/pois?extras%5B%5D=count&geohash=wx4g0bmjetr7&keyword=%E6%9C%9D&limit=20&type=nearby

分析请求参数和url 就不难发现,其实URL 请求 “?” 后面的内容 其实是编码之后的请求参数

这样,我们抓取该页面的数据就很好弄了,

■首先构造headers

■其次,我们自己维护一个关键字集合,

■通过遍历,构造不同的请求参数,

■发送请求,获取数据,并将数据保存在excel 中

输入图片描述

我们来看一下网页信息:

网页随便选取一处地点,就会跳转到上面的页面,

我们向下滑动鼠标的时候,网页是动态加载数据的,我们打开这个网页的时候,首先清空所有的页面请求,然后滑动鼠标,可以看到网页会自动去请求数据,

分析url可以发现,

url请求是:

https://mainsite-restapi.ele.me/shopping/restaurants?extras%5B%5D=activities&geohash=wx4ffdh2dge&latitude=39.86949&limit=24&longitude=116.48301&offset=24&terminal=web

header:

请分析url请求和请求参数 也可以发现,“?”后面的内容是编码之后的请求参数,

limit参数 可以理解成,每次加载的数据条数是24条

至于offset,我们滚动几次鼠标滑轮,就会发现,offset 是以24为基础递增的,0,24,48,72,96.....

这样我们需要循环取数据,直到该商圈地点附近没有外卖商家信息,进行下一个商圈地点的数据爬取

所以我们的策略是构造header请求,

根据上一节存储到excel 的数据,构造请求参数,

循环发送请求,每次设定不同的偏移量(offset),取得数据,写入新的excel 中

■2、代码如下:

#爬饿了么外卖数据--区域下各个地点的商家集合#https://mainsite-restapi.ele.me/v2/pois?#extras%5B%5D=count&geohash=wx4g0bmjetr7&keyword=%E6%9C%9D%E9%98%B3&limit=20&type=nearbyimport urllib.requestimport osimport jsonimport timefrom openpyxl import Workbookfrom openpyxl import load_workbookkeywordExcel="D:\worksapce\python\爬虫饿了么\\keyword.xlsx"keywords=[]targetDir ="D:\worksapce\python\爬虫饿了么"#文件保存路径def excelName():#根据日期生成文件ifnot os.path.isdir(targetDir):os.mkdir(targetDir)excelName=str(time.strftime ("%Y-%m-%d")+".xlsx")completePath=targetDir+"\\"+excelNamereturn completePathdef reqsetting():#初始化url请求,需要实时替换的是extral 和 header里的refererweburl = "https://mainsite-restapi.ele.me/shopping/restaurants?"extra1="extras%5B%5D=activities&geohash=wx4g56v1d2m&latitude=39.91771&limit=24&longitude=116.51698&offset=0&terminal=web"webheaders={"Accept":"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.8","Connection":"keep-alive","Cookie":"ubt_ssid=plds7ye19rj2rghg3oaar8hkt89yy7f1_2017-02-07; _utrace=ac9073c509bedb74b28a1482bd95a9d8_2017-02-07","Host":"mainsite-restapi.ele.me","Origin":"https://www.ele.me",#"Referer":"https://www.ele.me/place/wx4g56v1d2m","User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"}req=urllib.request.Request(url=weburl,headers=webheaders)return reqdef write2Excel(jsondata,title):#根据不同的商圈地点写入数据,每个商圈地点占用excel 的一个sheetfileName=excelName()isexit="false"if(os.path.exists(fileName)):wb=load_workbook(fileName)isexit="true"else :wb=Workbook()if(wb.__contains__(title)):ws=wb[title]ws.append([])else:ws=wb.create_sheet(title)ws.column_dimensions["A"].width =10.0ws.column_dimensions["B"].width =40.0ws.column_dimensions["C"].width =60.0ws.column_dimensions["D"].width =10.0ws.column_dimensions["E"].width =18.0ws.column_dimensions["F"].width =10.0ws.append(["ID","店名","地址","距离","人均消费","月销售额"])for i in range(len(jsondata)):row=jsondata[i]#print(type(row))if("average_cost"notin row.keys()):row["average_cost"]="无人均消费数据"ws.append([row["id"],row["name"],row["address"],row["distance"],row["average_cost"],row["recent_order_num"]])wb.save(fileName)def readKeyWordFromExcel():#从上一节生成的keywordExcel 中加载商圈地点fileName=keywordExcelif(os.path.exists(fileName)):wb=load_workbook(fileName)else:returnfor title in wb.sheetnames:ws=wb[title]for i in range(2,ws.max_row):infos={}#商圈地点数据,为生成请求参数做准备infos["name"]=ws.cell(row=i,column=4).valueprint("正在爬取 %s 附近外卖商家的数据..." % infos["name"])infos["ID"]=ws.cell(row=i,column=1).valueinfos["geohash"]=ws.cell(row=i,column=3).valueinfos["longitude"]=ws.cell(row=i,column=7).valueinfos["latitude"]=ws.cell(row=i,column=8).valueif(infos["geohash"]):req=reqsetting()req.add_header("Refer","https://www.ele.me/place/%s" % infos["geohash"])#修改请求头的refernewUrl=req.get_full_url()offset=0contentBytes=""while(contentBytes!="[]"):#构造请求参数,基本上只修改offset 偏移量数据params={"extras[]":"activities","geohash":"%s" % infos["geohash"],"latitude":"%s" % infos["latitude"],"longitude":"%s" % infos["longitude"],"terminal":"web","limit":24,"offset":offset}params=urllib.parse.urlencode(params)#请求参数编码req.full_url=newUrl+params #重新生成url请求webpage=urllib.request.urlopen(req)contentBytes = webpage.read().decode("utf-8")if(contentBytes!="[]"):jsondata=json.loads(contentBytes)write2Excel(jsondata,infos["name"])#将请求数据写入excel中offset+=24#便宜else :breakif __name__ == '__main__': #程序运行入口offset=0;readKeyWordFromExcel()点击此处输入图片描述

好了,今天的知识就分享到这里,想学习python爬虫的欢迎关注爱编程的南风,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习python的文章。同时欢迎在下面评论区留言如何学习python。

python爬取饿了么数据_阿里95亿美元拿下饿了么,我用python抓取了饿了么外卖数据信息...相关推荐

  1. 大数据24小时:阿里95亿美元全资收购饿了么,腾讯无人车首次公开亮相北京四环

    [数据猿导读]阿里巴巴集团.蚂蚁金服集团与饿了么联合宣布,阿里巴巴已经签订收购协议,将联合蚂蚁金服以95亿美元对饿了么完成全资收购 编辑 | sharon 官网 | www.datayuan.cn 微 ...

  2. python爬取携程酒店信息_不写代码玩转爬虫实例(3) - 抓取携程酒店信息

    背景需求 有不少朋友问永恒君携程网站的酒店信息怎么抓取,今天这篇文章来分享一下使用web scraper来快速实现抓取携程酒店信息. 例如,在携程官网搜索北京 密云水库的酒店信息, 可以搜索到非常多的 ...

  3. 查询数据 抓取 网站数据_有了数据,我就学会了如何在几个小时内抓取网站,您也可以...

    查询数据 抓取 网站数据 I had a shameful secret. It is one that affects a surprising number of people in the da ...

  4. df python 增加数据_美国确诊超100万!教你用Python画出全球疫情动态图(附数据下载)...

     CDA数据分析师 出品   [导语]:今天我们教你用Python绘制全球疫情动态图,技术部分请看第二部分. 获取数据:扫描下方公众号回复关键字"全球疫情" 目前,全球新冠疫情还十 ...

  5. 小白学数据_|_28张小抄表大放送:Python,R,大数据,机器学习

    1. Python的数据科学快速入门指南 如果你刚入门Python,那么这张小抄表非常适合你.查看这份小抄表,你将获得循序渐进学习Python的指导.它提供了Python学习的必备包和一些有用的学习技 ...

  6. python知网查重多少钱_他文献查到凌晨两点,我用Python十分钟搞定!

    大家好,我是爱学习的趣习君. 对于应届毕业生来说,今年一定是难熬的一年.本来找工作.写论文就已经是两座大山了,还要面临论文无指导的额外压力. 这让我想到了去年毕业的表弟,当时他为了完成论文,摔烂了三个 ...

  7. 学python最好的方式是什么意思_通过5个步骤以正确的方式学习Python

    1.弄清楚你的动机是什么 在开始深入学习Python在线之前,值得问问自己为什么要学习它.这是因为这将是一个漫长而有时痛苦的旅程.没有足够的动力,你可能无法完成. 找出激励你的动力将帮助你找到一个最终 ...

  8. python天气预报官网_python 实现对天气预报官网未来一周七天的天气情况抓取

    通过HTMLPaser和urlib模块对网页进行抓取并分析 实现步骤: 1.自定义MYHTMLParser类 2.实例化类并访问天气预报官网 3.抓取关键数据 4.对数据进行切片处理并输出字典 fro ...

  9. python机器人编程——在VREP环境中,UARM与摄像头联动,实现基于视觉识别的自动抓取,垃圾自动分类(上)

    目录 前言 在VREP中加入视觉传感,用python侧获取图像 在VREP中布置垃圾分类场景 Step1:用三维软件造模型 Step2:导入到vrep Step3:关联shap.调整位置及贴图 测试一 ...

最新文章

  1. Java 线程池框架核心代码分析--转
  2. if you have something important on the clean my mac
  3. EMNLP 2020 | 通过Contrast Set评估模型的局部决策边界
  4. 实训总结_实训总结汇报!
  5. push本地代码到github出错
  6. anaconda进出某个环境
  7. 如何解决EXCEL中的科学计数法
  8. [ios]iOS模拟器应用程序目录结构
  9. Flutter实战5 -- 天气查询APP重构之状态管理(ScopedModel)
  10. LeetCode 73. 矩阵置零(两个标记变量)
  11. 计算机培训中学语文研修计划,初中语文个人研修计划书
  12. 20180925-6 四则运算试题生成
  13. 某项目中,doubango与NAT服务器的冲突
  14. VS2008下easyMule-VeryCD源代码的编译
  15. 计算机指令集编程教程,PLC编程语言入门,常用指令集汇总分享
  16. 深度学习基础6(微分,偏导,梯度,链式法则)
  17. 打开文件管理器并进行文件夹的复制、移动、删除、创建
  18. 北京峰会系列二|基于SPDK的UDisk全栈优化
  19. nginx 正向代理http和https
  20. .dll、.lib、.a的转换

热门文章

  1. 毫米和像素怎么换算_像素(px)与毫米(mm)间的转换
  2. ffmpeg 抽帧处理
  3. cmake 从入门到入土
  4. 一个自用Typora魔改主题
  5. linux开机自动挂载硬盘命令,Linux系统开机自动挂载硬盘分区
  6. android 蓝牙耳机按钮,如何利用android从蓝牙耳机中捕获关键事件_bluetooth_开发99编程知识库...
  7. java 连接hive2,java jdbc连接hiveserver2
  8. PHP有限内存处理大文件(从两个文件提取相同行)
  9. html5+css3中的background: -moz-linear-gradient 用法
  10. 收发一体超声波测距离传感器模块_Arduino传感器篇