爬取北京新发地当天货物信息并展示十五天价格变化(三)---获取物品十五天内的价格

。。。。。。。。。。。。。。。。。。。。。。

  • 1.网页请求一下内容
  • 2.通过爬虫进行请求
  • 3.获取商品十五天详细数据并绘制折线图
  • 4.项目详细代码

1.网页请求一下内容

在这里插入图片描述

通过抓包我们发现一共七个参数
limit: 20                                           # 一页多少数据
current: 1                                         #第几页
pubDateStartTime: 2023/09/12       # 开始时间
pubDateEndTime: 2023/09/27          #结束时间
prodPcatid: 
prodCatid: 
prodName: 大白菜                           #名称

2.通过爬虫进行请求

首先我们获取十五天里这个货物一共有多少件

#name是由商品名-规格-产地组合而成
def xlx(name):                                  #用来获取名字为name的商品十五天内该货物共有多少条数据#name='白虾(精品)-21到24头并且活-'data = {'limit': '1','current': '1','pubDateStartTime': f'{s15}',#自定义的时间'pubDateEndTime': f'{end}',#自定义的时间'prodPcatid': '','prodCatid': '','prodName': name.split('-')[0],}count=requests.post(url, data=data).json()['count']p(name,count)#将名称和数量传入p函数

3.获取商品十五天详细数据并绘制折线图

def p(name,count):data = {'limit': f'{count}','current': '1','pubDateStartTime': f'{s15}','pubDateEndTime': f'{end}','prodPcatid': '','prodCatid': '','prodName': '',}data['prodName']=name.split('-')[0]res=requests.post(url='http://www.xinfadi.com.cn/getPriceData.html',data=data).json()class_=res['list'][0]['prodCat']res=res['list']pricelow=[]pricemax=[]time_list=[]for i in res:if i['prodName']==name.split('-')[0]:#sg=i['specInfo']s = i['specInfo'].replace('<', '小于')#对字符串进行处理替换特殊字符s = s.replace('>', '大于')s = s.replace('/', '并且')s = s.replace('-', '到')s = s.replace('\\', '或者')if s==name.split('-')[1]:
#画图if i['place']==name.split('-')[2]:pricemax.append(i['highPrice'])pricelow.append(i['lowPrice'])n=str(i['pubDate']).split(' ')[0].split('-')[1:]time_list.append(n[0]+'.'+n[1])pricelow.reverse()pricemax.reverse()time_list.reverse()print(name)plt.figure(figsize=(20, 10), dpi=100)plt.plot(time_list, pricelow)plt.savefig(fr'./类别/{class_}/价格趋势图/{name}.jpg')plt.close()with open(f'./类别/{class_}/价格文档/{name}.txt', 'w') as fp:fp.write(' '.join(time_list)+'\n'+' '.join(pricemax)+'\n'+' '.join(pricelow))time.sleep(1)

4.项目详细代码

import matplotlib
import requests
import datetime
from multiprocessing.dummy import Pool
from matplotlib import pyplot as plt
import os
import shutil
import time
matplotlib.use('agg')def RemoveDir(filepath):    #用来删除文件夹中的所有内容'''如果文件夹不存在就创建,如果文件存在就清空!'''if not os.path.exists(filepath):os.mkdir(filepath)else:shutil.rmtree(filepath)os.mkdir(filepath)def count(url,data):res = requests.post(url, data=data)num = res.json()['count']return numdef xlx(name):                                  #用来获取名字为name的商品十五天内该货物共有多少条数据#name='白虾(精品)-21到24头并且活-'data = {'limit': '1','current': '1','pubDateStartTime': f'{s15}','pubDateEndTime': f'{end}','prodPcatid': '','prodCatid': '','prodName': name.split('-')[0],}count=requests.post(url, data=data).json()['count']p(name,count)#print(name)#print(count)#将名称和数据的数量传给p函数def p(name,count):data = {'limit': f'{count}','current': '1','pubDateStartTime': f'{s15}','pubDateEndTime': f'{end}','prodPcatid': '','prodCatid': '','prodName': '',}data['prodName']=name.split('-')[0]res=requests.post(url='http://www.xinfadi.com.cn/getPriceData.html',data=data).json()class_=res['list'][0]['prodCat']res=res['list']pricelow=[]pricemax=[]time_list=[]for i in res:if i['prodName']==name.split('-')[0]:#sg=i['specInfo']s = i['specInfo'].replace('<', '小于')s = s.replace('>', '大于')s = s.replace('/', '并且')s = s.replace('-', '到')s = s.replace('\\', '或者')if s==name.split('-')[1]:if i['place']==name.split('-')[2]:pricemax.append(i['highPrice'])pricelow.append(i['lowPrice'])n=str(i['pubDate']).split(' ')[0].split('-')[1:]time_list.append(n[0]+'.'+n[1])pricelow.reverse()pricemax.reverse()time_list.reverse()print(name)plt.figure(figsize=(20, 10), dpi=100)plt.plot(time_list, pricelow)plt.savefig(fr'./类别/{class_}/价格趋势图/{name}.jpg')plt.close()with open(f'./类别/{class_}/价格文档/{name}.txt', 'w') as fp:fp.write(' '.join(time_list)+'\n'+' '.join(pricemax)+'\n'+' '.join(pricelow))time.sleep(1)def filetxt(filename):namelist=[]file = open(filename, "r", encoding="GBK")file = file.readlines()for line in file:line = line.strip('\n')namelist.append(line)return namelistclass_list=['水产','水果','粮油','肉禽蛋','蔬菜','调料','豆制品'] #所有的主类别
for i in class_list:                                        #重置类别文件with open(f'./类别/{i}/今日类别.txt', 'w') as fp:fp.write('')RemoveDir(f'./类别/{i}/价格文档')RemoveDir(f'./类别/{i}/价格趋势图')url='http://www.xinfadi.com.cn/getPriceData.html'           #主页面urltoday = datetime.date.today()                              #获取当前日期
yesterday = str(today - datetime.timedelta(days=1))  #获取今天往前十五天的日期 吧
s15=str(today - datetime.timedelta(days=15))
today=str(today)
enddata_list=today.split('-')
start_list=yesterday.split('-') #去掉日期后面的时分秒
s15=s15.split('-')
end=enddata_list[0]+'/'+enddata_list[1]+'/'+enddata_list[2]#将日期格式转换为我们data需要的格式
start=start_list[0]+'/'+start_list[1]+'/'+start_list[2]
s15=s15[0]+'/'+s15[1]+'/'+s15[2]
data={'limit': '1','current': '1','pubDateStartTime': start,'pubDateEndTime': end,'prodPcatid':'' ,'prodCatid': '','prodName':'' ,}                                                            #获取当天所有交易货物的data
res = requests.post(url, data=data)                              #发送post请求#提取出共有多少种货物
data['limit']=res.json()['count']                               #将data中的limit设置为货物总数就可以一次请求全部获取
res=requests.post(url,data=data).json()                            #获取到当天所有货物的产地型号等详细数据data=res['list']for i in data:                                                #循环便利每一种货物prodCat=i['prodCat']#提取出当前货物的类别s=i['specInfo'].replace('<','小于')s=s.replace('>','大于')s=s.replace('/','并且')s = s.replace('-', '到')s = s.replace('\\', '或者')name=i['prodName']+'-'+s+'-'+i['place']          #将货物的名字定为    物品名-型号-产地with open(f'./类别/{prodCat}/今日类别.txt', 'a+') as fp:       #按照类别将其保存到所属的主类文件夹中fp.write(name+'\n')                                      #写入数据每个数据一行for i in class_list:                                        #循环所有主类取出其中所有的货物名称filename=f'./类别/{i}/今日类别.txt'name_list=filetxt(filename)if name_list!=[]:#判断是否为空pool = Pool(3)                                     #开启线程池# 定义循环数origin_num = [x for x in name_list]                #每一个货物开启一个线程# 利用map让线程池中的所有线程‘同时’执行calc_power2函数pool.map(xlx, origin_num)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python计算巴氏距离

Python计算巴氏距离 巴氏距离简介 在统计中&#xff0c;巴氏距离&#xff08;Bhattacharyya Distance&#xff09;测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作…

大麦订单截图生成 大麦一键生成订单截图

新版大麦订单生成 图样式展示 这个样式图就是在大麦生成完的一个订单截图&#xff0c;它的状态是等待卖家发货 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;修改conf数据库账号密码 不会的可以看源码里有搭建教程 下载程序&#xff1a;https://pan.baidu.com/…

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图&#xff0c;这些数据和功能可以直…

如何在 Elasticsearch 中使用 Openai Embedding 进行语义搜索

随着强大的 GPT 模型的出现&#xff0c;文本的语义提取得到了改进。 在本文中&#xff0c;我们将使用嵌入向量在文档中进行搜索&#xff0c;而不是使用关键字进行老式搜索。 什么是嵌入 - embedding&#xff1f; 在深度学习术语中&#xff0c;嵌入是文本或图像等内容的数字表示…

使用GDIView排查GDI对象泄漏导致的程序UI界面绘制异常问题

目录 1、问题说明 2、初步分析 3、查看任务管理器&#xff0c;并使用GDIView工具分析 4、GDIView可能对Win10兼容性不好&#xff0c;显示的GDI对象个数不太准确 5、采用历史版本比对法&#xff0c;确定初次出现问题的时间点&#xff0c;并查看前一天的代码修改记录 6、将…

MySQL架构 InnoDB存储引擎

1. 什么是Mysql&#xff1f; 我们在开发的时候&#xff0c;我们都需要对业务数据进行存储&#xff0c;这个时候&#xff0c;你们就会用到MySQL、Oracal等数据库。 MySQL它是一个关系型数据库&#xff0c;这种关系型数据库就有Oracal、 MySQL&#xff0c;以及最近很火的PgSQL等。…

Docker-Windows安装使用

1.下载docker https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.配置虚拟化环境 通过控制面板“设置”启用 Hyper-V 角色 右键单击 Windows 按钮并选择“应用和功能”。选择相关设置下右侧的“程序和功能”。选择“打开或关闭 Windows 功能”。选择“Hyper-…

ElementUI -- Mock.js介绍和使用与首页导航栏左侧菜单搭建

1.1 mockjs介绍 Mock.js是一个用于生成随机数据和模拟接口请求的JavaScript库。它可以帮助开发人员在前端开发过程中模拟后端接口的返回数据&#xff0c;以便进行前端页面的开发和测试。 Mock.js有两个重要的特性风靡前端: 数据类型丰富 Mock.js提供了一套简单易用的API&#x…

双指针算法——移动零

双指针算法——移动零&#x1f60e; 前言&#x1f64c;题目详情&#xff1a;图解分析&#xff1a;代码分享&#xff1a;B站讲解视频链接&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧…

红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;获取初步立足点并搜集信息 第四步&#xff1a;软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶&#xff0c;详述了…

基于SSM的教师办公管理的设计与实现(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的教师办公管理的设计与实现&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

你的游戏项目有这些问题吗?

在移动游戏对高品质画面的要求不断增加的背景下&#xff0c;我们一直专注于移动设备GPU性能的优化&#xff0c;以确保您的游戏体验得以最佳展现。然而&#xff0c;不同GPU芯片之间的性能差异以及由此可能引发的GPU瓶颈问题使得优化工作更加具有挑战性。 因此&#xff0c;在不久…

git报错:Failed to connect to 127.0.0.1 port 1080

Bug描述 由于在试了网上的这条命令 git config --global http.proxy socks5 127.0.0.1:1080 git config --global https.proxy socks5 127.0.0.1:1080git config --global http.proxy 127.0.0.1:1080 git config --global https.proxy 127.0.0.1:1080Bug描述&#xff1a;Faile…

Three.js加载360全景图片/视频

Three.js加载360全景图片/视频 效果 原理 将全景图片/视频作为texture引入到three.js场景中将贴图与球形网格模型融合&#xff0c;将球模型当做成环境容器使用处理视频时需要以dom为载体&#xff0c;加载与控制视频动作每次渲染时更新当前texture&#xff0c;以达到视频播放效…

基于arduino的土壤湿度检测

1.总体设计框图 本浇花系统总体上分为硬件和软件两大组成部分。硬件部分包括Arduino UNO开发板、温湿度传感器、通信模块、浇水执行系统和液晶显示等。软件部分包括Android客户端。系统结构如图1所示 本浇花系统总体上分为硬件和软件两大组成部分。硬件部分包括Arduino UN…

Node.js安装教程【附安装包资源】

文章目录 安装包下载安装流程配置环境变量检查Node.js是否安装成功指定全局模块和模块缓存的路径设置淘宝镜像全局安装cnpm&#xff08;这一步可以选择是否执行&#xff09; 安装包下载 安装包下载 安装流程 修改安装路径 配置环境变量 看看环境变量里面是否有Node.js的…

手把手带你体验一场属于Linux的学习之旅

手把手带你体验一场属于Linux的学习之旅 Linux是一个开源的操作系统&#xff0c;以性能高和稳定著称因为继承unix&#xff0c;在权限和网络上的设计与表现也非常优异。同时其系统开源/免费/优秀/稳定&#xff0c;自由高可定制&#xff0c;深受程序员们等代表的极客们的喜爱&…

Python入门教程48:Pycharm永久镜像源的pip配置方法

国内几个好用的Python镜像服务器地址&#xff1a; 清华大学镜像站&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云镜像站&#xff1a;https://mirrors.aliyun.com/pypi/simple/中科大镜像站&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/中国科技大学镜…

Ros2 学习02- ubuntu22.04 安装ros2

设置镜像源 sudo vim /etc/apt/sources.list#阿里源 deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jamm…

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合&#xff0c;企业应用服务平台&#xff08;PaaS&#xff09;已从幕后走向台前&#xff0c;成为推动行业数字化转型的关键力量。此背景下&#xff0c;华为云PaaS智能化组装式交付方案闪耀全场&#xff0c;在近日结束的华为全联接大会 2023上倍受…