我正在尝试对Walmart的产品进行网络抓取。这是我尝试提取的链接 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个?
答案 0 :(得分:0)
您的问题是,用axios
进行的呼叫只会获取服务器提供的HTML
这意味着从系统其他部分获取产品的所有异步调用都将永远不在该请求中
将接收到的数据简单输出到一个新文件中,就会显示出这一事实
const fs = require('fs')
...
fs.writeFileSync('./data.html', res.data)
打开新的data.html
文件只会输出10
作为找到的product-title-link
的数量
为此,您不能使用axios
,而是要使用网络抓取程序库(例如Puppeteer),可以在给定的DOM横切之前等待所有产品加载时间。