Очистка текста от сложной структуры DOM

#javascript #dom #puppeteer #innertext

#javascript #dom #кукловод #внутренний текст

Вопрос:

Рассмотрим следующую иерархию в DOM

 <div class="bodyCells">
    <div style="foo">
       <div style="foo">
           <div style="foo1"> 'contains the list of text elements I want to scrape' </div>
           <div style="foo2"> 'contains the list of text elements I want to scrape' </div>
       </div>
       <div style="foo">
           <div style="foo3"> 'contains the list of text elements I want to scrape' </div>
           <div style="foo4"> 'contains the list of text elements I want to scrape' </div>
       </div>
  

Используя bodyCells имени класса, мне нужно извлекать данные из каждого из divs по одному (т.Е.) Сначала из 1-го div, затем из следующего div и так далее и сохранять их в отдельных массивах.Как я могу этого добиться? (с использованием puppeteer)

ПРИМЕЧАНИЕ: я пытался использовать имя класса напрямую для достижения этой цели, но он выдает все тексты в одном массиве. Мне нужно получать данные из каждого тега отдельно в разных массивах.

Ожидаемый результат:

 array1=["text present within style="foo1" div tag"] 
array2=["text present within style="foo2" div tag"] 
array3=["text present within style="foo3" div tag"]
array4=["text present within style="foo4" div tag"]
  

Комментарии:

1. Не могли бы вы привести пример ожидаемого результата? Это помогло бы сообществу более полно понять, чего вы хотите достичь.

2. Спасибо за обновление? Итак, сами отдельные массивы содержатся в большем массиве? Или это просто записанный вывод? Кроме того, каково было бы предполагаемое поведение, если бы один из divs содержал внутренний div? Например: <div style="foo3"> This is some <div>awesome</div> text!</div> .

3. @AlexanderNied да, в нем есть 5 разделов. он содержит текст.

Ответ №1:

Как вы заметили, вы можете извлекать каждый из текстов в одном массиве, используя имя класса. Далее, если вы выполните итерацию по каждому из них, вы можете создать отдельный массив для каждого подраздела.

Я создал скрипку здесь — https://jsfiddle.net/32bnoey6 / — с помощью этого примера кода:

 const cells = document.getElementsByClassName('bodyCells');

const scrapedElements = [];
for (var i = 0; i < cells.length; i  ) {
    const item = cells[i];
  for (var j = 0; j < item.children.length; j  ) {
    const outerDiv = item.children[j];
    const innerDivs = outerDiv.children;
    for (var k = 0; k < innerDivs.length; k  ) {
        const targetDiv = innerDivs[k];
      scrapedElements.push([targetDiv.innerHTML]);
    }
  }
}

console.log(scrapedElements);
  

Комментарии:

1. большое спасибо. если в этом есть какие-то другие подразделения, как мне этого добиться?

2. Вы можете использовать различные селекторы css для поиска элементов на странице или в пределах определенного элемента, который вы ищете. Я бы рекомендовал прочитать об использовании селекторов css в javascript dev.to/neutrino2211/using-css-selectors-in-javascript-3hlm