发送请求这里使用的 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
这是爬出来的结果,如果想分析分析啥的用着真挺合适的