所以L一直在try 使用Node Js进行网络剪贴,我试图刮掉耐克的网站,L设法检索了所有的数据,但图像都是Base64格式的.

以下是耐克网站上的 Select :

<img alt="Nike Air Max Dn Men's Shoes" class="product-card__hero-image css-1fxh5tw" height="100%" loading="eager" sizes="" src="https://static.nike.com/a/images/c_limit,w_592,f_auto/t_product_v1/f50070d2-77a3-4213-aebf-9371d9759548/air-max-dn-shoes-q51Wwn.png" width="100%">

以下是输出: [ 擦破的鞋子: { 名字:‘Nike Air Max Dn’, 售价:210美元, colored颜色 :"男鞋", 图像:‘数据:图像/gif;base 64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7’, HREF:‘https://www.nike.com/ca/t/air-max-dn-shoes-q51Wwn/DV3337-008’ }, {

](https://i.stack.imgur.com/xGWYy.png)

以下是我和Ltry 更改 Select 器的代码,似乎都不起作用:

async function scrapeShoes(url) {
  try {
    const response = await axios.get(url);
    if (response.status === 200) {
      const html = response.data;
      const $ = cheerio.load(html);
      const shoes = [];

      $('.product-card').each((index, element) => {
        const name = $(element).find('.product-card__title').text().trim();
        const price = $(element).find('.product-price').text().trim();
        const color = $(element).find('.product-card__subtitle').text().trim();
        let image = $(element).find('.product-card__hero-image').attr('src');
        const href = $(element).find('.product-card__link-overlay').attr('href');

      
        const shoe = { name, price, color, image, href };
        shoes.push(shoe);
      });

      console.log('Scraped Shoes:', shoes); 
      return shoes;
    } else {
      throw new Error(`Failed to retrieve data. Status code: ${response.status}`);
    }
  } catch (error) {
    throw new Error('Error fetching data:', error);
  }
}

const targetUrl = 'https://www.nike.com/ca/w/new-shoes-3n82yzy7ok';
scrapeShoes(targetUrl)
  .then(() => {

  })
  .catch(error => {
    console.error('Error scraping website:', error);
  });

推荐答案

当网页通过Java脚本加载时,由于发生了HTTP请求,所有产品的图像都会显示出来.

当您发出一个HTTP请求时,不会执行Java脚本,因此返回给您的DOM没有信息,就像您的情况一样.

为了使抓取更有效,并避免像Cheerio这样操纵DOM的库,我建议你直接使用我通过分析网站发现的这个API:

https://api.nike.com/cic/browse/v2?queryid=filteredProductsWithContext&language=en-GB&country=CA&channel=NIKE&path=/ca/w/new-shoes-3n82yzy7ok

它返回一个JSON对象,其中包含所有产品以及您需要的所有信息.

Node.js相关问答推荐

如何将Node.js与Nuxt.js一起使用?

Gmail API获取附件PDF未正确呈现.我遗漏了什么?

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

Inno Setup如何在现有文本文件中追加新内容

在 TypeScript 中正确键入 MongoDB find 方法

TS[2339]:类型 '() => Promise<(Document & Omit) | 上不存在属性空>'

BrowserRouter工作时为什么HashRouter不工作?

使用 .pipe(res) 向客户端发送音频不允许您搜索?

在数组的另一个对象中获取数组的mongoose 对象

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

在多个文件 node.js 之间共享和修改变量

为什么 JavaScript 的 parseInt(0.0000005) 打印5?

为当前目录提供服务的简单文件服务器

如何可靠地散列 JavaScript 对象?

为什么 Node 控制台不显示功能代码?

npm WARN 不推荐使用 graceful-fs@3.0.8:graceful-fs 版本 3

处理快速异步中间件中的错误

mongoose 填充与对象嵌套

Firestore:多个条件 where 子句

如何阻止 babel 将this转换为undefined(并插入use strict)