python爬取饿了么数据(2)

上一节我们去到了关键字 查询得到的附近商圈地点,

这一节我们查询地点附近的所有商家的月销售情况


1、网页信息


在上一节展现的那个网页随便选取一处地点,就会跳转到上面的页面,

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

分析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:

  1. accept:application/json, text/plain, */*
    accept-encoding:gzip, deflate, sdch, br
    accept-language:zh-CN,zh;q=0.8
    cookie:ubt_ssid=plds7ye19rj2rghg3oaar8hkt89yy7f1_2017-02-07; _utrace=ac9073c509bedb74b28a1482bd95a9d8_2017-02-07
    origin:https://www.ele.me
    referer:https://www.ele.me/place/wx4ffdh2dge
    user-agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36

url请求参数:

  1. extras[]:activities
    geohash:wx4ffdh2dge
    latitude:39.86949
    limit:24
    longitude:116.48301
    offset:24
    terminal:web
分析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=nearby
import urllib.request
import os
import json
import time
from  openpyxl  import Workbook
from  openpyxl  import load_workbook

keywordExcel="D:\worksapce\python\爬虫饿了么\\keyword.xlsx"

keywords=[]

targetDir ="D:\worksapce\python\爬虫饿了么"  #文件保存路径
def excelName():#根据日期生成文件
    if not os.path.isdir(targetDir):  
        os.mkdir(targetDir)
    excelName=str(time.strftime ("%Y-%m-%d")+".xlsx")
    completePath=targetDir+"\\"+excelName
    return completePath

def reqsetting():#初始化url请求,需要实时替换的是extral  和  header里的referer
    weburl = "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 req

def write2Excel(jsondata,title):#根据不同的商圈地点写入数据,每个商圈地点占用excel 的一个sheet
    fileName=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.0
        ws.column_dimensions["B"].width =40.0
        ws.column_dimensions["C"].width =60.0
        ws.column_dimensions["D"].width =10.0
        ws.column_dimensions["E"].width =18.0
        ws.column_dimensions["F"].width =10.0
        ws.append(["ID","店名","地址","距离","人均消费","月销售额"])
    

    for i  in range(len(jsondata)):
        row=jsondata[i]
        #print(type(row))
        if("average_cost" not  in 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=keywordExcel
    if(os.path.exists(fileName)):
        wb=load_workbook(fileName)
    else:
        return
    for title in wb.sheetnames:
        ws=wb[title]
        for i in range(2,ws.max_row):
            infos={}#商圈地点数据,为生成请求参数做准备
            infos["name"]=ws.cell(row=i,column=4).value
            print("正在爬取 %s 附近外卖商家的数据..." % infos["name"])
            infos["ID"]=ws.cell(row=i,column=1).value
            infos["geohash"]=ws.cell(row=i,column=3).value
            infos["longitude"]=ws.cell(row=i,column=7).value
            infos["latitude"]=ws.cell(row=i,column=8).value
            if(infos["geohash"]):
                req=reqsetting()
                req.add_header("Refer","https://www.ele.me/place/%s" % infos["geohash"])#修改请求头的refer
                newUrl=req.get_full_url()
                offset=0
                contentBytes=""
                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 :
                        break
                
        
if __name__ == '__main__':  #程序运行入口
    offset=0;
    readKeyWordFromExcel()



  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值