nodejs抓取数据
2022/2/23 11:24:10
本文主要是介绍nodejs抓取数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
示例代码
const axios = require('axios'); const fs = require('fs'); const request = require('request').defaults({ //忽略证书安全 rejectUnauthorized: false, }); const path = require('path'); const md5 = require('md5-node'); const cheerio = require('cheerio'); const base_url = '需要抓取的域名'; var domain = '图片下载替换的域名'; //相对于public 的 目录 var img_dir = '/uploads/'; var data_dir = '保存数据的文件夹路径'; // var data_dir = '/uploads'; //创建图片目录 fs.mkdirSync(path.join(__dirname,img_dir),{ recursive: true }); #需要抓取的数据 let arr = [ '378723' ]; #数据循环处理 for (let i = 0; i < arr.length; i++) { // var url = 'https://www.xxx.com/api/dam/editors/materials/'+arr[i]+'/info'; var url = 'https://www.xxx.com/api/v2/materials/'+arr[i]+'/info'; axios.get(url).then(data => { //格式化返回的数据 //返回的数据 let result_data = data.data; processEachPieceOfData(result_data) }).catch(error => { console.log('请求异常', error); }) } //var pageData = JSON.parse(fs.readFileSync('test365.json').toString()); //processEachPageOfData(pageData); //处理每页数据 //processEachPieceOfData(JSON.parse(fs.readFileSync('D:\\local\\design-itdiy\\public\\temp\\365\\20555\\20555_original.json').toString())) //处理每条数据 function processEachPieceOfData(oneData,base_dir = path.join(__dirname,data_dir)) { let dir_path = path.join(base_dir,oneData.id+''); //读取id 属性 检查目录是否存在, 不存在则创建 if( fs.existsSync(dir_path) === true ){ //文件夹存在,直接返回 }else{ console.log(dir_path) if( !fs.mkdirSync(dir_path,{ recursive: true }) ){ // return false; } } //写入原数据 var data = {}; data.preview = oneData.preview.url data.content = JSON.parse(oneData.content) data.title = oneData.title //下载图片到本地 processingRich(data.preview,oneData.contain_materials,path.join(dir_path,'img') ) //下载素材图片到本地 processingRichText(data.content.layouts,path.join(dir_path,'img')); fs.writeFileSync(path.join(dir_path,oneData.id+'_original.json'), JSON.stringify(data)); // fs.writeFileSync(path.join(dir_path,oneData.id+'_change.json'), JSON.stringify(data)); } //处理每个富文本 下载内容图片 function processingRichText(layouts,base_dir) { if( !fs.mkdirSync(base_dir,{ recursive: true }) ){ } let list = layouts[0].elements; //素材图片请求地址 // https://www.xxx.com/api/v2/materials/48232568/info?ignore_status=1 for (let i = 0; i < list.length; i++) { //格式化返回的数据 //返回的数据 if(list[i].type != 'text' && list[i].url != undefined){ if(getType(list[i].url)){ let file_name = md5(list[i].url)+getType(list[i].url); let file_path = path.join(base_dir, file_name); let fileStream = fs.createWriteStream(file_path,{autoClose:true}); request(list[i].url).pipe(fileStream); } } } } //处理每个富文本 下载图片和 返回替换后的富文本 function processingRich(preview,materials,base_dir) { if( !fs.mkdirSync(base_dir,{ recursive: true }) ){ } let file_name = md5(preview)+getType(preview); let file_path = path.join(base_dir, file_name); let fileStream = fs.createWriteStream(file_path,{autoClose:true}); console.log(preview,'preview') // console.log(fileStream,'fileStream') request(preview).pipe(fileStream); } //获取图片后缀 function getType(file){ if(file.indexOf('.png') >= 0){ return '.png'; }else if(file.indexOf('.jpg') >= 0){ return '.jpg'; }else if(file.indexOf('.gif') >= 0){ return '.gif'; }else if(file.indexOf('.svg') >= 0){ return '.svg'; }else if(file.indexOf('.jpeg') >= 0){ return '.jpeg'; }else{ return false; } }
总结: 根据自己的需求调整代码
这篇关于nodejs抓取数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04React 19 来了!新的编译器简直太棒了!
- 2025-01-032025年Node.js与PHP大比拼:挑选最适合的后端技术进行现代web开发
- 2025-01-03?? 用 Gemini API、Next.js 和 TailwindCSS 快速搭建 AI 推文生成项目 ??
- 2024-12-31Vue CLI多环境配置学习入门
- 2024-12-31Vue CLI学习入门:一步一步搭建你的第一个Vue项目
- 2024-12-31Vue3公共组件学习入门:从零开始搭建实用组件库
- 2024-12-31Vue3公共组件学习入门教程
- 2024-12-31Vue3学习入门:新手必读教程
- 2024-12-31Vue3学习入门:初学者必备指南
- 2024-12-30Vue CLI多环境配置教程:轻松入门指南