Python爬虫实战(进阶篇)—7获取每日菜价(附完整代码)

文章目录

  • 专栏导读
  • 背景
  • 前期准备
    • 1、网址:
    • 2、分析:
  • 请求url、请求方法、请求参数
  • 测试一个
  • 完整代码+写入Excel
  • 视频展示
  • 不足:
  • 结尾

专栏导读

🔥🔥本文已收录于《Python基础篇爬虫》

🉑🉑本专栏专门针对于有爬虫基础准备的一套基础教学,轻松掌握Python爬虫,欢迎各位同学订阅,专栏订阅地址:点我直达

🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢迎订阅《Python办公自动化》专栏,订阅地址:点我直达

🔺🔺此外《Python30天从入门到熟练》专栏已上线,欢迎大家订阅,订阅地址:点我直达

背景

  • 由于我是一个蔬菜个体户,那么我想每天查询一下每日蔬菜的价格趋势相关信息,我们可以通过Python爬虫进而获取每日的蔬菜价格信息

PS:这是我们的第七节课,之前的课,欢迎大家查阅啊

在这里插入图片描述

前期准备

1、网址:

  • 蔬菜价格网—点我直达

2、分析:

  • 我们发现蔬菜的第一个是【大蒜报价】

  • 最后一个是【空心菜报价】

在这里插入图片描述在这里插入图片描述

右击检查网页发现每一种蔬菜都有一个编号,如【大蒜】的编号是【JO_111924】

以此类推 [生姜】的编号是【JO_111925】

以此类推 [土豆】的编号是【JO_111926】
。。。。

最后一个 [空心菜】的编号是【JO_120097】

在这里插入图片描述

请求url、请求方法、请求参数

  • 🚩请求URL :https://api.jijinhao.com/history/quotejs.htm?codes=JO_120097&pageSize=7&style=3&_=1700121561588

  • 修改后:https://api.jijinhao.com/history/quotejs.htm?codes=JO_{蔬菜编号}&pageSize=7&style=3&_=1700121561588

  • 🚩请求方法:get()

  • 经测试,headers,记得加上【User-Agent】、【Host】、【Referer】

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'api.jijinhao.com',
'Referer': 'https://jiage.cngold.org/shucai/',
}
  • 🚩请求参数:

params = {
'codes': 'J蔬菜编号',
'pageSize': 7,
'style': 3,
'_': int(time.time())
}

测试一个

  • 我们发现,【quote】中的
    【q67】是商品名称
    【q63】是今日价格
    【q70】是与昨日差价
    【q59】是今日日期

  • 在这里插入图片描述

由于这里的返回的json字符串,不太好直接用json.loads(),加载成字典,我们可以将【var quot_str 】中的var去除(replace替换掉),再利用【exec()】将【quot_str】直接变为一个python变量

🚩重要知识点:使用上面【exec()】方法,quot_str这个变量会报错,不过没关系,依旧可以运行!!

🚩重要知识点:使用上面【exec()】方法,quot_str这个变量会报错,不过没关系,依旧可以运行!!

🚩重要知识点:使用上面【exec()】方法,quot_str这个变量会报错,不过没关系,依旧可以运行!!

代码

import time
import requests

url = 'http://api.jijinhao.com/history/quotejs.htm?'

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'api.jijinhao.com',
'Referer': 'https://jiage.cngold.org/shucai/',
}

params = {
'codes': 'JO_111924',
'pageSize': '7',
'style': '3',
'_': str(int(time.time()))
}

res_data = requests.get(url=url,headers=headers,params=params)
# print(res_data.text)

res_dict = exec(res_data.text.replace("var",'').strip())
res = quot_str[0]['data'][0]['quote']
# print(res)
print(f"报价:{res['q67']}\n日期:{res['q59']}——价格:{res['q63']}\n较昨日:{res['q70']}")

输出

报价:大蒜报价
日期:2023-11-16 00:00:00——价格:10.3100
较昨日:0.0200

完整代码+写入Excel

  • 那么我们利用for 循环 将【大蒜】的编号是【JO_111924】到 [空心菜】的编号是【JO_120097】直接循环出来:

  • 这里的编号还是有点问题,不过基本上已经可以跑出来了!

# -*- coding: UTF-8 -*-
'''
@Project :测试
@File    :main.py
@IDE     :PyCharm
@Author  :一晌小贪欢
@Date    :2023/11/16 16:01
'''

import time

import openpyxl
import requests

wb = openpyxl.Workbook()
ws = wb.active
ws.append(["报价",'日期','价格','较昨日'])


url = 'http://api.jijinhao.com/history/quotejs.htm?'

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
'Host': 'api.jijinhao.com',
'Referer': 'https://jiage.cngold.org/shucai/',
}

for i in range(111924,111974):
    params = {
    'codes': f'JO_{i}',
    'pageSize': '7',
    'style': '3',
    '_': str(int(time.time()))
    }

    res_data = requests.get(url=url,headers=headers,params=params)
    # print(res_data.text)

    res_dict = exec(res_data.text.replace("var",'').strip())
    try:
        res = quot_str[0]['data'][0]['quote'] # 这一行会报错,不过是对的,没关系
    except:
        pass
    # print(res)
    print(f"报价:{res['q67']}\n日期:{res['q59']}——价格:{res['q63']}\n较昨日:{res['q70']}")
    ws.append([res['q67'],res['q59'],res['q63'],res['q70']])


wb.save("./结果.xlsx")

视频展示

在这里插入图片描述

不足:

  • 这里的编号还是有点问题,大家可以课后自行在认真探索一番!

结尾

希望对大家有帮助

我最近在努力学习爬虫,大家共同进步!!

都看到这了,关注+点赞+收藏=不迷路!!

希望大家多多订阅,多多关注点赞

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

问题汇总20231103

文章目录 前言问题汇总1.所有操作系统在CPU层面上是不是都为时间片轮转的形式处理程序?只是任务调度的调度算法不同?那多线程的本质也是时间片吗?只不过很小?2.Mcu和mpu的本质区别3.下载HAL库步骤4.RAM,ROM,SRAM,SDRAM,DDR内存5.编…

Spring事务和事务的传播机制

目录 Spring中事务的实现 MySQL中的事务使用 Spring 编程式事务 TransactionTemplate 编程式事务 TransactionManager编程式事务 Spring声明式事务 Transactional 参数说明 事务因为程序异常捕获不会自动回滚的解决方案 Transactional 原理 Spring 事务隔离级别 Spring…

Apipost 推出IDEA插件一键生成API文档

今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,写完代码IDEA内一键生成API文档,无需安装、打开任何其他软件;写完代码IDEA内一键调试,无需安装、打开任何其他软件;生成API目录树,双击即可快速…

单片机编程原则

多任务编程的概念 方式一:实时操作系统(不建议新手使用) 方式二 :裸机多任务模型 逻辑多任务的基本原理 把三个任务分别分为一个一个的片段 然后先执行任务一的第一个切片 执行第二个任务的第一个片段 执行第三个任务的第一个片…

How to design a database storage model for water network information system

How to design a database storage model for water network information system 1、领域划分2、基础域2.1、概述2.2、E-R图2.3、SQL脚本 1、领域划分 序号中文名称英文名称代号备注1基础域basea012资产域assertsa023监测域monitora034水权域quotaa045灌溉域irrigationa056排涝…

JVM bash:jmap:未找到命令 解决

如果我们在使用JVM的jmap命令时遇到了"bash: jmap: 未找到命令"的错误,这可能是因为jmap命令没有在系统的可执行路径中。 要解决这个问题,可以尝试以下几种方法: 1. 检查Java安装:确保您已正确安装了Java Development …

数字孪生技术能够为旅游业带来什么新变化?

随着科技的不断发展,数字孪生技术逐渐融入各个行业,为旅游业的高质量发展提供了新的动力和可能性。数字孪生,即对现实世界的精确数字建模,通过实时数据同步、模拟分析,为旅游业带来了诸多创新和改变。 在数字孪生的理…

ES Kibana 简介

ES & Kibana 简介 来源:微信公众号《鲜枣课堂》 1998年9月4日,Google公司在美国硅谷成立。正如大家所知,它是一家做搜索引擎起家的公司。 无独有偶,一位名叫Doug?Cutting的美国工程师,也迷上了搜索引擎。他做了…

3. hdfs概述与高可用原理

简述 HDFS(Hadoop Distributed File System)是一种Hadoop分布式文件系统,具备高度容错特性,支持高吞吐量数据访问,可以在处理海量数据(TB或PB级别以上)的同时最大可能的降低成本。 HDFS适用于…

0门槛!用ChatGPT只花1天批量生成300个爆火TikTok视频

目录 1 2让天下没有难做的开发和运维,DevOps终于有了专属大模型 3关于 DevOpsGPT 1 不露脸,不怕视频也能从TikTok赚到钱?在过去30天,有人通过这个方式预计至少获得了超过1万美金的广告分成收益。这些成功账号的共同特点是,所有…

探究多态的原理与实现:虚函数表、动态绑定与抽象类

文章目录 一、多态概念二、多态实现(具体)2.1 虚函数2.2 虚函数 重写2.3 override关键字 与 final关键字2.4 重载、重写(覆盖)、重定义(隐藏)的区别 三、抽象类3.1 概念3.2 实现继承 && 接口继承 四…

通过使用阿里云服务器,搭建Java程序的运行环境

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一…

ACM练习——第四天

ok,今天又是三节课的一天。 刚刚吃完饭的我一刻也不敢耽误,直接开干!!! 这些题和力扣上的,为了练习数据结构的题是不一样的。 直接上嘴脸 题目 第一次放学 (nowcoder.com)来自牛客网 思路 先看他的输入…

8086与8088

一、8086与8088概述 8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线8088/8086都是由执行单元(EU)和总线接口部件(BIU)两大部分构成指令系统和寻址能力都相同,两种CPU是兼容的8088被称作准十六位的、是紧继8086…

【文件上传】upload-labs 通关

环境准备 靶场upload-labs-env-win-0.1环境windows 靶场描述 靶场攻略 Pass-01 1.上传一句话木马 发现有类型限制 2.上传图片木马 抓包 3.修改后缀 将png修改为php. 成功上传, 4.查找文件地址 5.中国蚁剑连接 6.成功 7.源码分析 function checkFile() {var fi…

深入理解锁

目录 常用锁策略 1.乐观锁 VS 悲观锁 2.轻量级锁 VS 重量级锁 3.自旋锁 VS 挂起等待锁 4.互斥锁 VS 读写锁 5.公平锁 VS 非公平锁 6.可重入锁 VS 可重入锁 CAS ABA问题 Synchronized原理 1. 锁升级/锁膨胀 2.锁消除 3.锁粗化 常用锁策略 1.乐观锁 VS 悲观锁 站在…

自建es数据迁移阿里云方案

一、ElasticSearch数据迁移方法介绍 https://help.aliyun.com/document_detail/170095.html?spma2c4g.26937906.0.0.429240c9ymiXGm 可以通过Logstash、reindex和OSS等多种方式完成阿里云Elasticsearch间数据迁移、Elasticsearch数据迁移至Openstore存储中、自建Elasticsear…

教你轻松保存视频号里的视频到相册

在今天的数字化社会,人们在各种社交平台上分享视频已经成为一种习惯。而在短视频平台上,用户可以轻松地上传、分享和观看各种内容丰富的视频。然而,很多用户在观看完善了的视频后,希望将喜欢的视频保存到手机相册中,以…

yyds!这个写文案神器爱了爱了

每次写文案都绞尽脑汁,不知道怎么写,想了很久,好不容易写完了,数据真的很差, 心累啊,家人们!! 只要输入你想写的标题,马上就能得到一篇,不满意就重写&#…

力扣-路径总和问题

路径总和 --简单 112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 f…