• 对北京新发地当时菜品三十天内价格分布式爬取(1)---(获取当时菜品数据并构建请求数据推入redis)


    本次项目网页url
    北京新发地: http://www.xinfadi.com.cn/priceDetail.html
    在这里插入图片描述
    我们首先创建一个爬虫用于收集url与请求的data然后b,c,d使用RedisCrawlSpider来对数据进行分布式爬取
    在此篇中我们仅介绍爬虫a

    一.获取当天所有菜品数据

    在这里插入图片描述

    这是一条请求的负载我们只需要对pubDateStartTime和pubDateEndTime进行更改就能够获取指定日期的菜品数据

    i = datetime.datetime.now()
    endtime=str(i.year)+'/'+"{:02d}".format(i.month)+'/'+"{:02d}".format(i.day)
    

    这两行代码将获取今日日期并将其格式化为我们需要的格式
    我们已经搞定了data现在我们发送请求分析数据

    data1={
    'limit': '20',
    'current': '1',
    'pubDateStartTime': starttime,
    'pubDateEndTime': endtime,
    'prodPcatid': '',
    'prodCatid': '',
    'prodName': ''
    }
    category = requests.post("http://www.xinfadi.com.cn/getPriceData.html",data=data1).json()
    

    在这里插入图片描述

    我们将获取到这些数据我们看到只有20条因为我们data中的limit设置为20
    在返回的数据中我们可以发现count: 487意味着所有数据为487条所以我们只需要将data中的limit修改为count即可一次请求获取全部数据

    二.构建请求用的json数据包并推入redis

    我们在上一步已经获取了当日所以菜品信息
    在这里插入图片描述
    这是我们对大白菜三十天内价格信息进去请求的data其中我们只需要更改limit,time及prodname就可获取我们想要的数据

    urls='http://www.xinfadi.com.cn/getPriceData.html'
    for i in result["list"]:
        print(i)
        form_data={
            "limit": "999",
            "current": "1",
            "pubDateStartTime":f"{histytime}",
            "pubDateEndTime":f"{endtime}",
        "prodPcatid":"",
        "prodCatid":"",
        "prodName":f"{i['prodName']}"
        }
        dict={"url":f"{urls}","form_data":f"{json.dumps(form_data)}","meta":""}
        v = r.lpush('xinfadi',json.dumps(dict) )
    

    3.源码

    import datetime
    import json
    
    import requests
    import redis
    
    
    # 建立Redis 链接
    r = redis.Redis(host='localhost', port=6379, db=0)
    i = datetime.datetime.now()
    s=i+datetime.timedelta(days=-1)
    h=i+datetime.timedelta(days=-30)
    endtime=str(i.year)+'/'+"{:02d}".format(i.month)+'/'+"{:02d}".format(i.day)
    starttime=str(s.year)+'/'+"{:02d}".format(s.month)+'/'+"{:02d}".format(s.day)
    histytime=str(h.year)+'/'+"{:02d}".format(h.month)+'/'+"{:02d}".format(h.day)
    print(starttime,endtime)
    data1={
    'limit': '20',
    'current': '1',
    'pubDateStartTime': starttime,
    'pubDateEndTime': endtime,
    'prodPcatid': '',
    'prodCatid': '',
    'prodName': ''
    }
    category = requests.post("http://www.xinfadi.com.cn/getPriceData.html",data=data1).json()
    number=category["count"]
    print(number)
    data1["limit"]=number
    result=requests.post("http://www.xinfadi.com.cn/getPriceData.html",data=data1).json()
    #print(result)
    
    urls='http://www.xinfadi.com.cn/getPriceData.html'
    for i in result["list"]:
        print(i)
        form_data={
            "limit": "999",
            "current": "1",
            "pubDateStartTime":f"{histytime}",
            "pubDateEndTime":f"{endtime}",
        "prodPcatid":"",
        "prodCatid":"",
        "prodName":f"{i['prodName']}"
        }
        dict={"url":f"{urls}","form_data":f"{json.dumps(form_data)}","meta":""}
        v = r.lpush('xinfadi',json.dumps(dict) )
    
    
    
    
    
    
    
  • 相关阅读:
    ModStart - 模块化开发框架的引领者
    hadoop程序实例,从新建到上传Hadoop集群跑成功
    强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍
    43 mysql insert select 的实现
    C#基础知识总结
    【软件测试】我们测试人搭上元宇宙的列车,测试一直在进军......
    Redis的基础与django使用redis
    推荐系统实践读书笔记-06利用社交网络数据
    Java连接websocket优雅断线、重连功能
    梯度下降法求解BP神经网络的简单Demo
  • 原文地址:https://blog.csdn.net/qq_62975494/article/details/139271004