记录一下使用nodejs爬取双色球历史开奖数据并写入文件过程,仅自己做着玩玩

双色球给了几个红球和几个蓝球使用js生成所有可能的结果

发送请求这里使用的 superagent
解析 html 这里使用的 cheerio
拿的数据是:https://datachart.500.com/ssq/history/history.shtml 这里的数据
在这里插入图片描述
分析:

使用 chrome 调试工具,可以看到当点击查询的时候发送了一个请求,并将结果返回,返回的直接是 html 字符串
在这里插入图片描述
在这里插入图片描述
可以看到,请求地址是:https://datachart.500.com/ssq/history/newinc/history.php?start=03001&end=21001 有两个参数,分别是 start 期 至 end 期

有了这个我们就可以去玩了,对了,这个网站是因为服务端没做什么 referer 限制或者其它限制,操作起来特别简单,自己玩玩就行了啊,别一直请求哈,给我玩儿挂了以后我拿数据还得重新找网址去这可不怎么好

创建一个空项目,初始化 package.json

mkdir empty-project
cd empty-project
yarn init --yes

安装依赖,一个个装或者一次性装都行

yarn add cheerio --dev
yarn add superagent --dev

新建 reptile.js 文件
这里直接贴代码了,直接拿走进行断点输出测试啥的都行

const fs = require('fs')
const path = require('path')
const cheerio = require('cheerio')
const superagent = require('superagent')

let url = `https://datachart.500.com/ssq/history/newinc/history.php?start=03001&end=21001`
let filePath = path.resolve('data/rets.json') // 存放爬取结果的文件地址 这里存放的 json 格式

async function getComposition() {
    
     // 爬取html
    const responseRet = await superagent.get(url)
    const responseHtml = responseRet.text
    return responseHtml
}

function getTargetData(html) {
    
     // 解析 html 串,变成数据

    const $ = cheerio.load(html)
    // 先找到 tr 然后拿 a 和 第二个td 里的内容
    const trList = $('#tablelist').find('.t_tr1')

    let retData = {
    
    }

    trList.map((index, item) => {
    
    

        const tdList = $(item).find('td')

        const issue = $(tdList[0]).text()

        let reds = ''
        for (let i = 1; i < 7; i++) {
    
    
            if (i < 6) {
    
    
                reds += $(tdList[i]).text() + ','
            } else {
    
    
                reds += $(tdList[i]).text()
            }
        }
        const blue = $(tdList[7]).text()

        retData[issue] = reds + ' - ' + blue
    })

    return retData
}

function assemblyData(data) {
    
      // 处理数据,变成我们最终想要的那个格式
    let fileData = {
    
    }
    Reflect.ownKeys(data)
        .sort((a, b) => Number(a) - Number(b))
        .map(item => {
    
    
            fileData[String(item)] = data[String(item)]
        })

    return JSON.stringify(fileData, null, '\t')
}

function executeWrite(data) {
    
     // 写入文件
    fs.writeFileSync(filePath, data)
}

(async ()=>{
    
     // 自调用直接执行匿名函数

    const retHtml = await getComposition()
    
    const retData = getTargetData(retHtml)
    
    const fileData = assemblyData(retData)
    
    executeWrite(fileData)
    
})()

在 package.json 的 scripts 里边添加指令:

"scripts": {
    
    
    "res": "node ./src/reptile.js"
}

直接运行 yarn res

在这里插入图片描述
在这里插入图片描述
这是爬出来的结果,如果想分析分析啥的用着真挺合适的

猜你喜欢

转载自blog.csdn.net/qq_38652871/article/details/112245988
今日推荐