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


    专栏导读

    🔥🔥本文已收录于《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/',
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 🚩请求参数:

    params = {
    'codes': 'J蔬菜编号',
    'pageSize': 7,
    'style': 3,
    '_': int(time.time())
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    测试一个

    • 我们发现,【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']}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    输出

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

    完整代码+写入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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    视频展示

    在这里插入图片描述

    不足:

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

    结尾

    希望对大家有帮助

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

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

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

  • 相关阅读:
    产业互联网,并非消费互联网式的置身事外
    淘宝企业的定价是怎么来的呢淘宝企业店铺转让价格有哪些因素?
    秋招面经第二弹:百度一面-大数据开发工程师
    计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示
    配置Java环境变量不生效的解决办法
    【Web项目实战】基于STOMP的聊天室【高仿QQ界面,世界频道,私聊,头像】
    微信怎样批量添加好友?批量添加好友的好处有哪些?
    服务器空间不足的解决方法
    Vue的数据控制-----计算属性(computed)&&侦听器(watch)
    爬虫入门教程:爬虫概述
  • 原文地址:https://blog.csdn.net/weixin_42636075/article/details/134444365