首页 > 解决方案 > 抓取后如何将整个数据作为 json 文件获取

问题描述

在 node.js 中,我尝试使用 Axios 创建一个 Web抓取项目,并且在 console.log 时可以看到全部信息,但是当我尝试使用该数据创建 JSON 文件时,我只能获取数据中的第一个元素你帮帮我,拜托!!!!

  "use strict";

  const puppeteer = require('puppeteer');
  const axios = require('axios');
  const cheerio = require('cheerio');
  const jsdom = require('jsdom');
  const fs = require('fs');
  const {JSDOM} = jsdom;
  const createCsvWriter = require('csv-writer').createObjectCsvWriter;

     
    
class dataToCsv {
constructor() {
    this.getData();
}
async getData() {
   try {
    const KeyWord = 'laptop'
    const url = `https://www.amazon.com/s?k=${KeyWord}&ref=nb_sb_noss_2`;

    axios.get(url)
        .then((response) => {
            let $ = cheerio.load(response.data);
            $('span.a-size-medium').each(async function (i, e) {
              let names = await $(e).text();   
                 let datas = '{ "employees" : [' +
                             `{ "firstName": ${names}}]}`;

                let dataJsons = await JSON.stringify(datas, null, 2);

                fs.writeFile('./data/student-2.json', dataJsons, (err) => {
                    if (err) throw err;
                    console.log('Data written to file');
                });  
          });

            $('span.a-offscreen').each(async function (i, e) {
              let prices = await $(e).text();   
                 let datas = '{ "employees" : [' +
                             `{ "firstName": ${prices}}]}`;

                let dataJsons = await JSON.stringify(datas, null, 2);

                fs.writeFile('./data/student-3.json', dataJsons, (err) => {
                    if (err) throw err;
                    console.log('Data written to file');
                });  
          });

        }).catch(function (e) {
        console.log(e);
    });
   
   } catch (error) {
       console.error(error);
   }
}

 }
 new dataToCsv();

这是 JSON 输出:

{
 "prices": "$239.99"
}

好的,我发现了获取数据的问题,但现在我无法使用多行获取数据。这是新代码

async getData() {
   try {
    
    const KeyWord = 'laptop'
    const url = `https://www.amazon.com/s?k=${KeyWord}&ref=nb_sb_noss_2`;

    axios.get(url)
        .then((response) => {

            let $ = cheerio.load(response.data);

            let names = $('span.a-size-medium').text()
            let prices = $('span.a-offscreen').text()

            let datas = {
                        "name": names,
                        "price": prices,
                }
                let dataJsons = JSON.stringify(datas, null, 2);

                fs.writeFile('./data/data.json', dataJsons, (err) => {
                    if (err) throw err;
                    console.log('Data written to file');
                }); 

        }).catch(function (e) {
        console.log(e);
    });
   
   } catch (error) {
       console.error(error);
   }
}

和 JSON 输出是这样的

{ "name": "Acer Swift 3 轻薄笔记本电脑 | 14" 全高清 IPS 100% sRGB 显示屏 | AMD Ryzen 7 5700U 八核处理器 | 8GB LPDDR4X | 512GB NVMe SSD | 无线 6 | 背光知识库 | FPR | 亚马逊 Alexa | SF314-43-R2YYAcer Swift 3 英特尔 Evo 轻薄笔记本电脑,14 英寸全高清,英特尔酷睿 i7-1165G7,英特尔 Iris Xe 显卡,8GB LPDDR4X,256GB NVMe SSD,Wi-Fi 6,指纹读取器,背光 KB, SF314-59-75QCAcer Aspire 5 A515-46-R14K 超薄笔记本电脑 | 15.6" 全高清 IPS | AMD 锐龙 3 3350U 四核移动处理器 | 4GB DDR4 | 128GB NVMe SSD | 无线 6 | 背光知识库 | 亚马逊 Alexa | Windows 10 家庭版(S 模式)最新_HP Pavilion 15.6 英寸 FHD 笔记本电脑 PC 适用于商务学生,配备第 11 代英特尔酷睿 i5-1135G7 处理器 8GB RAM 512GB SSD WiFi HDMI 蓝牙网络摄像头 Windows 10 家庭版 1 周 AimCare SupLenovo IdeaPad 3 15.6" 6 英寸全高清 IPS 显示屏,Windows 10 家庭版,HP 快速充电,轻巧设计(15-dy2021nr,2020)华硕笔记本电脑 L410 超薄笔记本电脑,14 英寸全高清显示屏,英特尔赛扬 N4020 处理器,4GB RAM,128GB 存储空间,NumberPad,Windows 10 家用 S 模式,1 年 Microsoft 365,星黑色,L410MA-DB04 便携式显示器 - Lasitu 100% sRGB 超薄 15.6 英寸金属框架便携式屏幕 USB C/HDMI 游戏显示器,适用于笔记本电脑/PC/手机/PS3-5/开关/ Xbox 带可折叠外壳HP 14 笔记本电脑、AMD Ryzen 5 5500U、8 GB RAM、256 GB SSD 存储、14 英寸全高清显示屏、Windows 10 家庭版、轻薄便携、微边缘和防眩光屏幕、长电池寿命 (14 -fq1021nr, 2021)Acer Swift 3 轻薄笔记本电脑 | 14" 全高清 IPS 100% sRGB 显示屏 | AMD Ryzen 7 5700U 八核处理器 | 8GB LPDDR4X | 512GB NVMe SSD | 无线 6 | 背光知识库 | FPR | 亚马逊 Alexa | SF314-43-R2YYHP Stream 11.6 英寸高清笔记本电脑、英特尔赛扬 N4000、4 GB RAM、32 GB eMMC、Windows 10 Home 和 Office 365 个人版 1 年(11-ak0010nr,宝蓝色)戴尔 Inspiron 灵越 15 3000 商业版和学生笔记本电脑(2021 最新型号),15.6 英寸高清显示屏,英特尔 N4020 双核处理器,16GB RAM,1TB SSD,网络摄像头,HDMI,蓝牙,Wi-Fi,黑色,Windows 102021 HP 15.6 英寸薄笔记本电脑,英特尔 N4020, 8GB RAM 128GB SSD 网络摄像头、1 年 Office365、Wi-Fi、双核高达 2.8 GHz、Windows 10 S、FHD 显示屏、

"price": "$629.99$749.99$649.99$849.99$361.40$399.99$629.00$699.00$638.49$249.90$269.99$277.98$299.99$379.99$419.99$309.00$279.00$399.00$399.99$2,611.49$1,116.99$1,499.00$900.00$1,099.99$172.00$799.00$264.00$659.99$1,099.99$359.00$549.00$1,299.00$535.00$659.99$279.99$149.99$549.00$629.99$749.99$233.48$559.00$419.00$77.99$97.45$172.50 $171.00$299.99$379.00$499.00" }

标签: node.jsjsonweb-scrapingaxioscheerio

解决方案


推荐阅读