Я пытаюсь очистить этот веб-сайт, получить таблицу и сохранить ее в массив
Чтобы попытаться отладить свои ошибки, я использовал вкладку консоли в CTRL + SHIFT + I в хроме. Там я использовал консоль для ввода своей команды. Команда была:
document.querySelectorAll("tr")
Я знаю, как сохранить данные в массив, и это даже работает, но только до первых 99 элементов. Этот снимок экрана — это то, что я получаю в качестве вывода, когда запускаю команду.
При этом вывод делится на 3 части. Каждая часть охватывает 99 элементов.
Есть ли способ получить все данные в одной части?
Мой код:
const text = await page.evaluate(() => Array.from(document.querySelectorAll(`tr > td`), element => element.textContent));
console.info(text.length);
Выход:
99
Все данные существуют в одной части, в NodeList, возвращаемом querySelectorAll
— то, что вы видите, — это просто консоль JavaScript, пытающаяся упростить ручную навигацию по свойствам, разделяя их для отображения в консоли. Пытаться:
const trs = document.querySelectorAll("tr");
console.info(trs.length);
и вы получите все 202 или 203. Вы должны иметь возможность очищать все данные по мере необходимости, например:
const arr = [...trs].map(tr => tr.children[0].textContent)
дает вам ["SPAC Ticker", "SPAC Ticker", "AACQ"
и т. д. для столько элементов, сколько есть в NodeList — просто в качестве примера.
Здесь работает просто отлично: i.stack.imgur.com/Lg9mX.png Ничего не нажимал. На вашем скриншоте также показана длина выше 200: i.stack.imgur.com/noRXA.png см. length: 203
и NodeList(203)
. Пожалуйста, проверьте еще раз, он должен работать.
Это работает на веб-сайте, но в моем реальном коде это не так.
Пожалуйста, помогите мне исправить это.
Я установил Puppeteer, и он все еще работает: i.stack.imgur.com/46ho2.png
ЧТО??! КАК? Это тот же код, что и у меня?
Почти, я просто изменил tr > td
на просто tr
, чтобы показать количество строк. (tr > td
дает общее количество TD, которое намного больше)
Звучит очень странно, если вы действительно получаете другой результат. Возможно, сайт отображает разные результаты в зависимости от IP-адреса пользователя или чего-то еще? Я пытался подключиться к нему как из США, так и из Канады, и это дает тот же результат, чуть больше 200 строк.
СПАСИБО БОЛЬШОЕ. Это сработало и для меня. Ты понятия не имеешь, как я счастлив
Можете ли вы прикрепить скриншот всего кода? Конец немного обрезан. Просто хочу сравнить.
Такой же, как у вас, только с tr
вместо него. Array.from(document.querySelectorAll('tr')
Хорошо. Спасибо.
Text.length возвращает 99. На веб-сайте, который я использую, есть кнопка «загрузить еще». Они показывают только 99 записей данных за клик. Итак, если я нажму загрузить больше, я получу еще 99 значений.