web-scraping - 在线服务或命令行实用程序从 json api 变化页面参数中获取多个页面
问题描述
是否有一些在线实用程序或命令行应用程序可以让我做这样的事情:
curl_pages "http://xxxx.api.users?param1=v1¶m2=v2&len=100&page={{page}}"
这样它就会从改变{{page}}
参数的 url 中获取数据,直到返回一个空数组,然后给我一个 json 单个文件,其中包含所有结果?
开发起来很简单,但我想这是一个相当不错的命令,而且一定有人已经发明了它......
仅作记录,以防有人发现它有用,这是我想出的快速而肮脏的解决方案:
const fetch = require('node-fetch');
const fs = require('fs');
const main = async () => {
// process params
if (process.argv.length < 5) {
console.error('bad parameters. usage:')
console.error(' node --tls-min-v1.0 fetch.js <url> <from> <to>')
console.error('')
console.error(' url: url to be fetched. ej: https://myservice/api/users?p1=v1&page={{page}}&len=10')
console.error(' from: number of first page to fetch')
console.error(' to: number of last page to fetch')
process.exit(1)
}
const url = process.argv[2]
const from_page = parseInt(process.argv[3])
const to_page = parseInt(process.argv[4])
let data = []
let page = from_page
let page_data = []
page_data = await fetch_page(url, page++)
data = [...data, page_data]
while (page <= to_page && page_data.length > 0) {
if (page % 10 === 0)
console.log(`procesando pagina ${page}/${to_page-from_page+1}`)
page_data = await fetch_page(url, page++)
data = [...data, page_data]
}
const json = JSON.stringify(data.flat(), null, 2)
fs.writeFileSync('output.json', json, 'utf8')
}
const fetch_page = async (url, p) => {
url = url.replace('{{page}}', p.toString())
const response = await fetch(url)
return await response.json()
}
main()
解决方案
Curl 将采用数字范围:
curl "http://xxxx.api.users?param1=v1¶m2=v2&len=100&page=[1-100]"
Burp Suite 也很受欢迎。
推荐阅读
- algorithm - 这个组合生成器的时间复杂度是多少
- javascript - Node 找不到没有 .js 扩展名的模块
- python - 在字典中为同一个键创建多个值(Python)
- apache-spark - Databricks dbutils 抛出 NullPointerException
- c# - 从表中删除所有属性
- excel - 在 SQL Server 2012 上部署包的 SSIS 问题
- c++ - 有人可以在此 C++ 代码中解释以下语法吗
- javascript - is my syntax wrong with throwing new error? My test is failing... not sure why
- c++ - 如何将 heic 格式文件发送到 OpenCV
- java - 如何在 sql 连接池中重置会话?