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 之前装载产品。
我正在尝试网络抓取沃尔玛的产品。这是 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
的调用只会让您获得服务器
这意味着从他们系统的其他部分获取产品的任何异步调用永远不会在该请求中
将接收到的数据简单输出到新文件,将显示这一事实
const fs = require('fs')
...
fs.writeFileSync('./data.html', res.data)
打开新的 data.html
文件将只输出 10
作为 product-title-link
找到的数目
为此你不能使用 axios
而是一个网络 scraper 库,例如 Puppeteer 和它一样,你可以等待所有在给定时间横向 DOM 之前装载产品。