Node.js puppeteer - Получение данных без элементов - PullRequest
0 голосов
/ 25 августа 2018

Я использую node.js и puppeteer для получения некоторых данных.... все же данные отображаются без элементов строки td и т. д.Если я скопирую внешний html-файл цели, я получу это так:

<code><pre>
    <strong>Date Filed   File        ID Code     Company Name</strong>
    <hr>
    08-24-2018   <a href="/117-index.html">ABC/A</a>      <a href="url;id=777">777</a>   Company A
    08-24-2018   <a href="/007-index.html">ABC/A</a>      <a href="url;id=612">612</a>   Company B
    08-24-2018   <a href="/750-index.html">ABC/A</a>      <a href="url;id=619">619</a>   Company C
    <hr>

Как мне получить данные из этих 4 столбцов (Столбец 1: Дата заполнена, Столбец 2: Файл, Столбец 3: идентификационный код и столбец 4: название компании)?

Я смотрю в инструменте разработки и вижу его вот так

<code><pre>
    <strong>Date Filed File ID Code Company Name</strong>
    <hr>
    08-24-2018   
    <a href="/117-index.html">ABC/A</a>      

    <a href="url;id=777">777</a>   
    Company A 08-24-2018   
    <a href="/007-index.html">ABC/A</a>      

    <a href="url;id=612">612</a>   
    Company B 08-24-2018   
    <a href="/750-index.html">ABC/A</a>      

    <a href="url;id=619">619</a>   
    Company C
    <hr>

... и когда я нажимаю на него, это выглядит так:

<code><pre>
    <strong>Date Filed File ID Code Company Name</strong>
    <hr>
    08-24-2018&nbsp;&nbsp;&nbsp;   
    <a href="/117-index.html">ABC/A</a>      
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="url;id=777">777</a>   
    &nbsp;&nbsp;&nbsp;Company A 
    08-24-2018&nbsp;&nbsp;&nbsp;   
    <a href="/007-index.html">ABC/A</a>      
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="url;id=612">612</a>   
    &nbsp;&nbsp;&nbsp;Company B 
    08-24-2018&nbsp;&nbsp;&nbsp;
    <a href="/750-index.html">ABC/A</a>      
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <a href="url;id=619">619</a>   
    &nbsp;&nbsp;&nbsp;Company C
    <hr>

Когда я утешаю количество ссылок, я получаю 6 .... app.js

const puppeteer = require('puppeteer');
const fs = require('fs-extra');

(async function main() {
  try {

    const browser = await puppeteer.launch({ headless: false })
    const page = await browser.newPage();

    await page.goto('url', {waitUntil: 'load'});

    const table = await page.waitForSelector('body table');
    const rows = await page.$$('body table pre a');
    console.log(rows.length);

    ...


  } catch (e) {
    console.log('our error', e);
  }

})();

Но как мне получить эти данные правильно?

Редактировать: OuterHTML

<code>const pre = await page.$('body table pre');
const preVal = await page.evaluate( pre => pre.outerHTML, pre );
console.log(preVal);

<pre><strong>Date Filed   File        ID Code     Company Name</strong><hr>08-24-2018   <a href="/117-index.html">ABC</a>      <a href="url;id=777">777</a>   Company A
08-24-2018   <a href="/007-index.html">ABC</a>      <a href="url;id=612">612</a>   Company B
08-24-2018   <a href="/750-index.html">ABC</a>      <a href="url;id=619">619</a>   Company C
<hr>

1 Ответ

0 голосов
/ 25 августа 2018

Используя ваш первый фрагмент кода, вы можете извлечь данные, используя следующий метод:

const result = await page.evaluate( () =>
{
    return document.getElementsByTagName( 'pre' )[0].innerHTML.split( '<hr>' )[1].trim().split( '\n' ).map( element =>
    {
        const parser = new DOMParser();
        const cells  = element.trim().split( / {2,}/ );

        cells.splice( 2, 0, parser.parseFromString( cells[1], 'text/html' ).getElementsByTagName( 'a' )[0].textContent );
        cells.splice( 4, 0, parser.parseFromString( cells[3], 'text/html' ).getElementsByTagName( 'a' )[0].textContent );

        return {
            'date_filed'   : cells[0],
            'file'         : cells[1],
            'file_text'    : cells[2],
            'id_code'      : cells[3],
            'id_code_text' : cells[4],
            'company_name' : cells[5]
        };
    });
});

console.log( result[0].date_filed );   // 08-24-2018
console.log( result[1].date_filed );   // 08-24-2018
console.log( result[2].date_filed );   // 08-24-2018

console.log( result[0].file );         // <a href="/117-index.html">ABC/A</a>
console.log( result[1].file );         // <a href="/007-index.html">ABC/A</a>
console.log( result[2].file );         // <a href="/750-index.html">ABC/A</a>

console.log( result[0].file_text );    // ABC/A
console.log( result[1].file_text );    // ABC/A
console.log( result[2].file_text );    // ABC/A

console.log( result[0].id_code );      // <a href="url;id=777">777</a>
console.log( result[1].id_code );      // <a href="url;id=612">612</a>
console.log( result[2].id_code );      // <a href="url;id=619">619</a>

console.log( result[0].id_code_text ); // 777
console.log( result[1].id_code_text ); // 612
console.log( result[2].id_code_text ); // 619

console.log( result[0].company_name ); // Company A
console.log( result[1].company_name ); // Company B
console.log( result[2].company_name ); // Company C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...