Web Scraping 沃尔玛的产品与 cheerio

Webscraping walmarts products with cheerio

我正在尝试网络抓取沃尔玛的产品。这是 link 我正在尝试提取 https://www.walmart.com/search/?query=&cat_id=91083 我能够从该页面成功抓取大约 10 个产品。这是我正在使用的代码。

const axios = require('axios');
const cheerio = require('cheerio');

axios.get('https://www.walmart.com/search/?query=&cat_id=91083').then( res => {
        var combino1 = [];
        const $ = cheerio.load(res.data);

        $('a.product-title-link').each( (index, element) => {
        const name = $(element)
        .first().text()
        combino1[index] = {name}
        })
        console.log(combino1);
    })

当我用 a.product-title-link 搜索 dom 时,它显示了 40 个产品。为什么我只能抢到10个,抢不到40个?

您的问题是使用 axios 的调用只会让您获得服务器

提供的 HTML

这意味着从他们系统的其他部分获取产品的任何异步调用永远不会在该请求中

将接收到的数据简单输出到新文件,将显示这一事实

const fs = require('fs')
...
fs.writeFileSync('./data.html', res.data)

打开新的 data.html 文件将只输出 10 作为 product-title-link 找到的数目

为此你不能使用 axios 而是一个网络 scraper 库,例如 Puppeteer 和它一样,你可以等待所有在给定时间横向 DOM 之前装载产品。