Web scraping 联机服务或命令行实用程序,用于从json api可变页面参数获取多个页面

Web scraping 联机服务或命令行实用程序,用于从json api可变页面参数获取多个页面,web-scraping,Web Scraping,是否有一些在线实用程序或命令行应用程序允许我执行以下操作: curl_pages "http://xxxx.api.users?param1=v1&param2=v2&len=100&page={{page}}" 这样它就可以从url获取数据,改变{{page}参数,直到返回一个空数组,然后返回一个json单一文件,其中包含所有连接的结果 这将是微不足道的发展,但我想这是一个相当不错的命令,一定有人已经发明了它 为了记录在案,万一有人发现它有用,这是我想出的快速而肮脏

是否有一些在线实用程序或命令行应用程序允许我执行以下操作:

curl_pages "http://xxxx.api.users?param1=v1&param2=v2&len=100&page={{page}}"
这样它就可以从url获取数据,改变
{{page}
参数,直到返回一个空数组,然后返回一个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()
const fetch=require('node-fetch');
常数fs=要求('fs');
常量main=async()=>{
//过程参数
如果(进程argv.length<5){
console.error('错误的参数。用法:')
console.error('node--tls-min-v1.0 fetch.js')
控制台错误(“”)
console.error('url:url-to-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')
进程。退出(1)
}
const url=process.argv[2]
const from_page=parseInt(process.argv[3])
const to_page=parseInt(process.argv[4])
让数据=[]
让第页=从第页开始
让页面_data=[]
页面\数据=等待获取\页面(url,第++)
数据=[…数据,第页数据]
while(第0页){
如果(第%10页===0)
log(`procesando pagina${page}/${to_page-from_page+1}`)
页面\数据=等待获取\页面(url,第++)
数据=[…数据,第页数据]
}
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=等待获取(url)
return wait response.json()
}
main()

卷曲将采用数字范围:

curl "http://xxxx.api.users?param1=v1&param2=v2&len=100&page=[1-100]"
此外,打嗝套件也很受欢迎