需求:在A电脑内用node和superagent爬取头像和证件号,将头像nase64编码后和身份证一起保存在excel。后在B电脑内用node访问接口,参数是excel内的头像和证件号。数据可能几百上千条,所以批量访问的时候需要设置同步异步的问题,且B电脑的访问链接由于参数是图片base64,返回结果可能不是很快,希望能得到完整代码和最优解。能有多线程什么最好。
7条回答
- 「已注销」 2023-03-08 21:31关注
“Devil组”引证GPT后的撰写:
在A电脑内使用以下代码来爬取并保存图片和证件号:const superagent = require('superagent'); const cheerio = require('cheerio'); const xlsx = require('xlsx'); const async = require('async'); const fs = require('fs'); const filename = 'data.xlsx'; const getImagesAndIds = (callback) => { const images = []; const ids = []; const urls = [ 'http://example.com/user1', 'http://example.com/user2', // add more urls as needed ]; async.eachSeries(urls, (url, next) => { superagent.get(url).end((err, res) => { if (err) return next(err); const $ = cheerio.load(res.text); const image = $('img.avatar').attr('src'); const id = $('#id').text(); images.push(image); ids.push(id); next(); }); }, (err) => { if (err) return callback(err); const workbook = xlsx.utils.book_new(); const worksheet = xlsx.utils.json_to_sheet(ids.map((id, i) => ({id, image: images[i]}))); xlsx.utils.book_append_sheet(workbook, worksheet, 'data'); xlsx.writeFile(workbook, filename); callback(null); }); }; getImagesAndIds((err) => { if (err) console.error(err); console.log('Done'); });在B电脑内使用以下代码来读取Excel文件,并将图片和证件号码上传到远程API:
const superagent = require('superagent'); const xlsx = require('xlsx'); const async = require('async'); const apiUrl = 'http://example.com/api'; const processData = (data, callback) => { async.eachLimit(data, 5, (row, next) => { const { id, image } = row; superagent.post(apiUrl) .send({ id, image }) .end((err, res) => { if (err) console.error(err); next(); }); }, (err) => { if (err) return callback(err); callback(null); }); }; const workbook = xlsx.readFile('data.xlsx'); const worksheet = workbook.Sheets['data']; const data = xlsx.utils.sheet_to_json(worksheet); processData(data, (err) => { if (err) console.error(err); console.log('Done'); });用了async模块来处理异步操作。在A电脑中,用了async.eachSeries来依次爬取每个URL,并在完成后保存数据到Excel文件中。在B电脑中,用了async.eachLimit来限制并发数,并依次处理Excel文件中的每一行数据,并将数据上传到远程API。
这个代码还使用了superagent模块来进行HTTP请求,并使用了cheerio模块来解析HTML。用了xlsx模块来处理Excel文件。
解决 无用评论 打赏 举报 编辑记录