Попытка извлечь информацию из HTML-ответа с помощью Nodejs - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь получить только электронную почту (myemail@hotmail.com) из моего ответа HTML, используя модули cheerio и puppeteer. но я получаю разные вещи, которые мне не нужны, чтобы использовать их все. Его помещают в класс p2 в тд / тр. при установке tr в качестве параметра в

вот так выглядит мой код:

const puppeteer = require('puppeteer');
const $ = require('cheerio');
const url = 'https://mywebsite.com';

puppeteer
  .launch()
  .then(function(browser) {
    return browser.newPage();
  })
  .then(function(page) {
    return page.goto(url).then(function() {
      return page.content();
    });
  })
  .then(function(html) {
    $('tr', html).each(function() {
        // putting all the result into the list

      console.log($(this).text());
    });
  })
  .catch(function(err) {
    //handle error
  });

Я получаю этот вывод:

Схема мобильной почтовой коробки

myemail@hotmail.com
Электронная почта myemail@hotmail.com Менеджер Секретарь

мне нужно просто myemail@hotmail.com

это моя таблица HTML:

</td>
                </tr>
                <tr>
                    <td class="p1">E-mail</td>
                    <td class="p2">
                            <span style="float: none; word-wrap: break-word;"> <a href="mailto:myEmal@hotmail.com"> myEmal@hotmail.com
                                    <div style="padding-right: 2px; background-position: -115px -434px; height: 14px !important; float: right" class="ico"></div>
                            </a>
                            </span>
                        </td>

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Учитывая ваш HTML, самый простой способ будет выглядеть так:

$('td.p2 a[href^=mailto]', html).each(function() {
  console.log($(this).text().trim());
});

Обратите внимание, что вам нужно закрыть браузер после очистки:

let _browser;

puppeteer
  .launch()
  .then(function(browser) {
    _browser = browser; // <-- memorize browser reference
    return _browser.newPage();
  })
  .then(function(page) {
    return page.goto(url).then(function() {
      return page.content();
    });
  })
  .then(function(html) {
    $('td.p2 a[href^=mailto]', html).each(function() {
      console.log($(this).text().trim());
    });
  })
  .then(function(){
    _browser.close() // <-- use it to close the browser
  })

Если вы используете узел 8+, для таких сценариев лучше использовать async / await.

0 голосов
/ 14 января 2019

Попробуйте получить содержимое в пределах этого класса.

console.log($(this).find('td.p2').text());
...