Python爬取贵金属行情2_python爬取上海金交所黄金价格

找到了请求的网址和格式,code参数是

JO_9753,JO_92226,JO_9754,JO_71,JO_70,JO_73,JO_72,JO_75,JO_9751,JO_9752,JO_92224,JO_92225,JO_92276,JO_76,JO_74,JO_92277,JO_92278

后面拼了一个时间戳,请求内容返回结果如下:

里面是一个的数据,看了一下觉得太复杂了,因为不知道对应的变量名字,得一个个找,所幸搜了一下这个quote_json,找着了解析的源码getQuote(),美滋滋

把js搞下来

function getQuote(){
        var codes = "JO_9753,JO_92226,JO_9754,JO_71,JO_70,JO_73,JO_72,JO_75,JO_9751,JO_9752,JO_92224,JO_92225,JO_92276,JO_76,JO_74,JO_92277,JO_92278";
        var url="https://api.jijinhao.com/quoteCenter/realTime.htm?codes="+codes;
        $.getScript(url,function(){
            if(quote_json != null && quote_json != ""){
                var codeArr = codes.split(',');
                for(var i in codeArr){
                    var jCode = codeArr[i];
                    var quote = quote_json[jCode];

                    if(quote != undefined) {
                        var digits = 2;
                        digits = quote.digits;
                        if(isNaN(digits)) digits=2;
                        //最新价
                        var q63Val = quote.q63;
                        q63Val = format(q63Val,digits);
                        if(isNaN(q63Val)) q63Val="----";
                        //涨跌值
                        var q70Val = quote.q70;
                        q70Val = format(q70Val,digits);
                        if(isNaN(q70Val)) q70Val="----";
                        //涨跌幅
                        var q80Val = quote.q80;
                        q80Val = format(q80Val,2);
                        if(isNaN(q80Val)) q80Val="----";
                        //开盘价
                        var q1Val = quote.q1;
                        q1Val = format(q1Val,digits);
                        if(isNaN(q1Val)) q1Val="----";
                        //收盘价
                        var q2Val = quote.q2;
                        q2Val = format(q2Val,digits);
                        if(isNaN(q2Val)) q2Val="----";
                        //最高价
                        var q3Val = quote.q3;
                        q3Val = format(q3Val,digits);
                        if(isNaN(q3Val)) q3Val="----";
                        //最低价
                        var q4Val = quote.q4;
                        q4Val = format(q4Val,digits);
                        if(isNaN(q4Val)) q4Val="----";
                        //时间
                        var qTimeVal = quote.time;
                        if(isNaN(qTimeVal)){
                            qTimeVal = "----";
                        }else{
                            qTimeVal = new Date(qTimeVal).Format("yyyy-MM-dd hh:mm:ss");
                        }
                        //买入价
                        var q5Val=quote.q5;
                        q5Val=format(q5Val,digits);
                        if(isNaN(q5Val)) q5Val="----";
                        //卖出价
                        var q6Val=quote.q6;
                        q6Val=format(q6Val,digits);
                        if(isNaN(q6Val)) q6Val="----";
                        //商品英文名
                        var showCode = quote.showCode;
                        if(showCode == undefined)showCode="----";
                        //单位
                        var unit=quote.unit;
                        
                        if(unit == undefined || unit=="")unit="----";
                        if(q63Val == 0) {
                            q63Val = "<em>----</em>";
                            q70Val = "<em>----</em>";
                            q80Val = "<em>----</em>";
                            showCode = "<em>"+showCode+"</em>";
                        } else {
                            if(q70Val > 0){
                                q63Val = "<em class='red'>" + q63Val + "</em>";
                                q70Val = "<em class='red'>"+q70Val+"</em>";
                                q80Val = "<em class='red'>"+q80Val+"%</em>";
                                showCode = "<em>"+showCode+"</em>";
                            } else if(q70Val < 0){
                                q63Val = "<em class='green'>"+q63Val+"</em>";
                                q70Val = "<em class='green'>"+q70Val+"</em>";
                                q80Val = "<em class='green'>"+q80Val+"%</em>";
                                showCode = "<em>"+showCode+"</em>";
                            } else if(q70Val == 0){
                                q63Val = "<em>"+q63Val+"</em>";
                                q70Val = "<em>"+q70Val+"</em>";
                                q80Val = "<em>"+q80Val+"%</em>";
                                showCode = "<em>"+showCode+"</em>";
                            }
                        }

                        if(q1Val != 0) {
                            if (parseFloat(q1Val) > parseFloat(q2Val)) {
                                q1Val = "<em class='red'>"+q1Val+"</em>";
                            } else if (parseFloat(q1Val) < parseFloat(q2Val)) {
                                q1Val = "<em class='green'>"+q1Val+"</em>";
                            } else {
                                q1Val = "<em>"+q1Val+"</em>";
                            }
                        }
                        if(q3Val != 0) {
                            if (parseFloat(q3Val) > parseFloat(q2Val)) {
                                q3Val = "<em class='red'>"+q3Val+"</em>";
                            } else if (parseFloat(q3Val) < parseFloat(q2Val)) {
                                q3Val = "<em class='green'>"+q3Val+"</em>";
                            } else {
                                q3Val = "<em>"+q3Val+"</em>";
                            }
                        }
                        if(q4Val != 0) {
                            if (parseFloat(q4Val) > parseFloat(q2Val)) {
                                q4Val = "<em class='red'>"+q4Val+"</em>";
                            } else if (parseFloat(q4Val) < parseFloat(q2Val)) {
                                q4Val = "<em class='green'>"+q4Val+"</em>";
                            } else {
                                q4Val = "<em>"+q4Val+"</em>";
                            }
                        }
                        if(q5Val != 0) {
                            if (parseFloat(q5Val) > parseFloat(q2Val)) {
                                q5Val = "<em class='red'>"+q5Val+"</em>";
                            } else if (parseFloat(q5Val) < parseFloat(q2Val)) {
                                q5Val = "<em class='green'>"+q5Val+"</em>";
                            } else {
                                q5Val = "<em>"+q5Val+"</em>";
                            }
                        }
                        if(q6Val != 0) {
                            if (parseFloat(q6Val) > parseFloat(q2Val)) {
                                q6Val = "<em class='red'>"+q6Val+"</em>";
                            } else if (parseFloat(q6Val) < parseFloat(q2Val)) {
                                q6Val = "<em class='green'>"+q6Val+"</em>";
                            } else {
                                q6Val = "<em>"+q6Val+"</em>";
                            }
                        }
                        q2Val = "<em>"+q2Val+"</em>";
                        $("#"+jCode+"_price").html(q63Val);
                        $("#"+jCode+"_sellPrice").html(q6Val);
                        $("#"+jCode+"_buyPrice").html(q5Val);
                        $("#"+jCode+"_updownPercent").html(q70Val);
                        $("#"+jCode+"_updown").html(q80Val);
                        $("#"+jCode+"_open").html(q1Val);
                        $("#"+jCode+"_high").html(q3Val);
                        $("#"+jCode+"_low").html(q4Val);
                        $("#"+jCode+"_close").html(q2Val);
                        $("#"+jCode+"_time").html(qTimeVal);
                        $("#"+jCode+"_showCode").html(showCode);
                        $("#"+jCode+"_unit").html(unit);
                    } else {
                        $("#"+jCode+"_price").html("<em>----</em>");
                        $("#"+jCode+"_sellPrice").html("<em>----</em>");
                        $("#"+jCode+"_buyPrice").html("<em>----</em>");
                        $("#"+jCode+"_updownPercent").html("<em>----</em>");
                        $("#"+jCode+"_updown").html("<em>----</em>");
                        $("#"+jCode+"_open").html("<em>----</em>");
                        $("#"+jCode+"_high").html("<em>----</em>");
                        $("#"+jCode+"_low").html("<em>----</em>");
                        $("#"+jCode+"_close").html("<em>----</em>");
                        $("#"+jCode+"_time").html("<em>----</em>");
                        $("#"+jCode+"_showCode").html("<em>----</em>");
                        $("#"+jCode+"_unit").html("<em>----</em>");
                    }
                }
            }
        });
    }

其中有很多判断数值然后给他标红或者标绿的操作,可以去掉,然后----转换为None,不需要的html代码也去掉,只保留数据,处理一下时间戳转换日期时间格式

然后开始写代码:

还是先搞一个中文对照的字典,拼接请求,做好header,将返回结果转换为json字典,然后逐个击破,此代码仅供学习研究,不要用于非法用途,否则后果自负

import datetime
import time
import requests
import json

gold_dict = {
    "Au(T+D)": "黄金T+D",
    "mAu(T+D)": "m黄金T+D",
    "Ag(T+D)": "白银T+D",
    "AuT+D": "黄金T+D",
    "mAuT+D": "m黄金T+D",
    "AgT+D": "白银T+D",
    "Au9999": "黄金9999",
    "Au9995": "黄金9995",
    "Au100g": "金条100g",
    "Au50g": "金条50g",
    "Ag999": "白银999",
    "AuT+N1": "黄金T+N1",
    "AuT+N2": "黄金T+N2",
    "SGiAu100g": "gi黄金100g",
    "SGiAu9999i": "i黄金9999",
    "SGiAu995i": "i黄金995",
    "Ag9999": "白银9999",
    "PT9995": "铂金9995",
    "NYAuTN06": "纽约金TN06",
    "NYAuTN12": "纽约金TN12",
}
 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/f3469d2cdcb5bef401eef6cc269f215a.png)

![img](https://img-blog.csdnimg.cn/img_convert/7c302395141554d3c7bd38ed4db0f698.png)

![img](https://img-blog.csdnimg.cn/img_convert/3d521f129ee9883393de115c388c13e0.png)

![img](https://img-blog.csdnimg.cn/img_convert/31beb51981471fdee4c18751c426e564.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

g.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/2a7ad45ec63c2aaa83d890dada224e78.jpeg)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值