掘金第一次写文章,记一次node爬取小程序数据~
首先声明,本例仅供学习参考
实现思路
使用node+koa2搭建服务,下载所需要的依赖(fs,koa-body,xlsx,superagent),下载fiddler抓包工具,具体使用和配置附上链接fiddler安装和配置
配置好之后打开fiddler,然后在电脑微信端打开小程序,就可以看到所有的http请求,host + url 就是要请求的数据接口地址,我是一个一个的点击去找的,通过对比右下角的数据就能知道哪个接口是我们所需要的,下图右侧的text view里面就是请求接口的参数,然后header里面一般会携带一些鉴权的信息,我们一次性获取数据,直接照搬就行了,下图是我测试抓取的数据包

通过拿到的接口地址和请求参数,在本地尝试请求,用superagent请求url,爬取第一页的数据
async function getppData(page) {
const uri = `${host}/culturalrelics/MuseumInquire`
const options = {
city: '',
name: '',
page_size: 500,
page: page,
}
return new Promise((resolve, reject) => {
superagent
.post(uri)
.send(JSON.stringify(options))
.set(header)
.end((err, res) => {
if (err) console.log(err)
resolve(res.body)
})
})
}
拿到数据之后,接口会返回page(当前页),page_size(每页多少条),total_count总条数,那么就可以根据这些数据判断是否爬完所有数据
let _page = 1
let xlsxObj = [
{
name: '数据列表',
data: [],
},
]
async function writeXlsx() {
let res = await getppData(_page)
const total_count = res.data.total_count
let list = res.data.list
if (res && res.data && list.length > 0) {
list.forEach((item) => {
let _item = []
for (const key in item) {
_item.push(item[key])
}
xlsxObj[0].data.push(_item)
})
// 如果爬到的数据少于总数据,则继续爬
if(Number(_page * res.data.page_size) < total_count){
_page ++;
writeXlsx()
}else{
// 爬完写入到excel
let buf = xlsx.build(xlsxObj)
fs.writeFile(__dirname + '/my.xlsx', buf, (err) => {
if (err) console.log(err)
console.log('写入成功')
})
}
}
}
//启动服务时先执行一次
writeXlsx()
如果爬完所有数据,则把数据写入到excel!到此,爬虫服务就完成了