Webscraping продукты Walmarts с Cheerio - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь создать веб-продукт 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 , он показывает 40 продуктов. Почему я могу взять только 10, а не 40?

1 Ответ

0 голосов
/ 12 апреля 2020

Ваша проблема в том, что при вызове с axios вы получите только HTML, предоставленный с сервера

, это означает, что любые асинхронные вызовы, которые выбирают продукты из других частей их системы, никогда не будут в этом запросе

простой вывод данных, полученных в новый файл, покажет этот факт

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

открытие нового файла data.html приведет только к выводу 10 в качестве числа из product-title-link найдено

enter image description here

Для этого вы не можете использовать axios, кроме библиотеки веб-скребков, например, Puppeteer как и в этом случае, вы можете подождать, пока все продукты будут загружены, прежде чем пересечь DOM в данный момент времени.

...