使用纯javascript 爬取双色球历史数据

一、前言

本人需要一个双色球历史数据来完成本人自己的应用。故上网查询各种api接口。发现大部分接口都是收费,而且接口仅可以获取最近50-100期的历史数据。经过大量查找,终于找到了一个网站,可以提供每天100次的免费查询接口。看了一下,从2003年第一期到目前每一期都有。但是对于身为程序员的我们,嘿嘿。文末我会附上我自己的token。但是因为没氪金,所以每天只有100次调用。有缘人可以直接拿去用。因为拿到这个token需要实名认证。

二、过程

直接贴上网站:

https://www.juhe.cn/docs

在这里搜索彩票,可以得到一个api:

在这里插入图片描述

按照要求注册(你们可以直接用我的token,不用注册了),订阅这个双色球数据。我们得到一个接口如下:
http://apis.juhe.cn/lottery/history?key=afc556731226f0ea785fd87fe5383d62&lottery_id=ssq&page_size=50&page=1

通过pagesizepage属性,我们就可以拿到某一时期的历史数据。返回结果如下:
在这里插入图片描述
看到这里不禁一笑。JSON。呵呵,立即想到了使用elasticsearch。

三、动手

本来想着本地随便弄个ajax,循环50次即可搞定。但是测试发现该接口:不 支 持 跨 域 !

于是采用jsonp,发现也无法调用。接口无法支持jsonp.

咋办?于是脑子一转。去同域试试?查看api接口,尝试访问
http://apis.juhe.cn/ 果然可以访问:

在这里插入图片描述
于是万恶的我按下了F12…

进入控制台,敲上ajax测试代码。没有ajax?没关系,复制jquery.min.js内容贴到控制台。当然,你也可以使用fetch 和原生的XmlhttpRequest。

剩下的就是建库。es建库,然后编写js 插入代码。代码都在下面,如果你使用elasticsearch,那么你复制到控制台就能跑。如果对elasticsearch不熟悉,可以参考我的博客 javascript玩转ElasticSearch(一)

当然,如果你不希望使用es作为你的数据存储媒介,你可以修改代码,使用Blob对象创建一个文件进行下载。网上示例很多,我就不贴了。



function req(page, callback) {
    
    
    var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    xmlHttp.open("get", 'http://apis.juhe.cn/lottery/history?key=afc556731226f0ea785fd87fe5383d62&lottery_id=ssq&page_size=50&page='+page, true);      //打开连接

    xmlHttp.onreadystatechange = function () {
    
    
        try {
    
      //判断是否成功返回数据
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
    
    
                objData = JSON.parse(xmlHttp.responseText);   //解析文本格式的json数据并赋给json对象
                callback(objData.result.lotteryResList);
            }
        }
        catch (err) {
    
     alert(err); }
    }
    xmlHttp.send(null);//发送
}

function insertToES(data) {
    
    
    data.lottery_no = Number(data.lottery_no);
    $.ajax({
    
    
        "type": "post",
        "contentType": 'application/json',
        "url": `http://localhost:9200/lottery_ssq/lottery_ssq?refresh=wait_for`,
        "data": JSON.stringify(data),
        "success": () => {
    
    
            console.log(data.lottery_no + " 导入成功")
        },
        "error": (e) => {
    
    
            console.error(data.lottery_no + "导入失败")
        }
    })

}
var page = 1;
var interval = setInterval(() => {
    
    
    req(page, function (reqs) {
    
    
        if (!reqs)
            clearInterval(interval);
        var length = reqs.length;
        var index = 0;
        var interval_inner = setInterval(() => {
    
    
            if (index == length) {
    
    
                clearInterval(interval_inner);
                return;
            }
            insertToES(reqs[index++]);
        }, 100)
        page++;
    });

}, 40000)

运行结果:
在这里插入图片描述

kibana截图:
在这里插入图片描述

四、结语:

附上我使用的两个token,你们随意使用,每天100次。按照50条每次,一个token每天可以用2次。

afc556731226f0ea785fd87fe5383d62
50656fe3d4ea32cd98c31c19192136b3

喜欢请点个赞,谢谢~

猜你喜欢

转载自blog.csdn.net/qq_29722281/article/details/103100363