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

news/2024/7/3 1:07:26

本次项目网页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) )







http://lihuaxi.xjx100.cn/news/2173556.html

相关文章

2024年物理化学与工程技术发展国际会议(ICPCETD 2024)

全称:2024年物理化学与工程技术发展国际会议(ICPCETD 2024) 会议网址:http://www.icpcetd.com 会议时间: 2024.06.30 截稿时间:2024.06.21 会议地点: 上海 投稿邮箱:icpcetd_info163.com 投稿标题:ArticleT…

QT 自定义协议TCP传输文件

后面附带实例的下载地址 一、将文件看做是由:文件头+文件内容组成,其中文件头包含文件的一些信息:文件名称、文件大小等。 二、文件头单独发送,文件内容切块发送。 三、每次发送信息格式:发送内容大小、发送内容类型(文件头或是文件块内容)、文件块内容。 四、效果展…

uniapp - 文章模块页面

在上一篇文章中,创建了一个空白的文章模块页面。在这一篇文章,让我们来向页面中填充内容。 目录 页面效果涉及uniapp组件1.view2.swiper3.scroll-view4.属性解读1) class"style1 style2 .."2) circular单属性无赋值3) :autoplay"autoplay…

抖店怎么选品?抖店爆款选品思路技巧,新手直接用!

大家好,我是电商花花。 抖店选品永远是我们做抖店,做电商的核心,店铺想要出单,想要赚钱,我们就一定要学会怎么选品,怎么筛选商品。 而我们绝大多数新手并没有办法保证持续选爆款的能力,如果店…

VsCode创建Python虚拟环境

不同的项目,大多使用不同的版本与包,为每个项目创建不同的环境,可以防止版本等的不同而带来的影响。 Python自3.3版本之后,官方自带了用于创建虚拟环境的venv模块,以下将介绍venv模块在Python虚拟环境的用法。 1.安装相…

Ajax都有哪些优点和缺点?

AJAX(Asynchronous JavaScript and XML)是一种使用多项技术的Web开发技术,它允许通过异步请求与服务器交换数据,而无需刷新整个页面。这种技术可以显著提高Web应用程序的性能和用户体验。以下是AJAX的主要优点和缺点: …

Java如何将tif格式图片转为jpg格式图片

在Java中,将TIFF(.tif)格式的图片转换为JPEG(.jpg)格式的图片,通常需要使用图像处理库,如Apache Commons Imaging(之前称为Sanselan)或Java Advanced Imaging (JAI)。但是…

【C++】牛客——BC157 素数回文

✨题目链接: BC157 素数回文 ✨题目描述 现在给出一个素数,这个素数满足两点: 只由1-9组成,并且每个数只出现一次,如13,23,1289。 位数从高到低为递减或递增,如2459,87631。 请你判断一下&…