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