Чтение содержимого с отображаемой веб-страницы в nodejs - PullRequest
0 голосов
/ 10 июня 2018

Я хотел бы прочитать весь контент полностью визуализированной веб-страницы в nodejs и поработать с содержимым.

В данный момент я использую PhantomJS, но он настолько нестабилен.Он падает каждые 10-20 страниц и теряет память как сумасшедший.(от 300 МБ до 2,8 ГБ после 15 страниц)

enter image description here

То же самое на нашем сервере Ubuntu - он работает на 10-20 страницах, а затем вылетает,

Я вижу, что у многих других людей точно такая же проблема с PhantomJS.

Так что я удивился ... каковы альтернативы?

Кто-нибудь здесь знает оКак исправить PhamtomJS или знает еще один простой стабильный компонент, который может читать визуализированную веб-страницу и помещать ее в переменную в nodejs?

Любая помощь будет очень признательна - я потратил более 100 часов, пытаясь заставить работать PhantomJS (новый экземпляр для каждой страницы, повторное использование одного и того же экземпляра, снижение скорости с использованием тайм-аутов и т. Д. И т. Д. И т. П. Нетнезависимо от того, что это все еще протекает и все еще вылетает).

1 Ответ

0 голосов
/ 10 июня 2018

В прошлом, когда я просматривал тяжелые сайты, я достиг хороших результатов, отменив некоторые запросы на сторонние сайты, такие как Google Maps, виджеты Facebook и Twitter, распространители рекламы и т. Д., См. здесь более подробно .

Но сейчас я просто предлагаю кукловод .Это нативный модуль узла, он использует последнюю версию Chromium в качестве браузера и постоянно разрабатывается инженерами Google.Идеология API основана на идеологии PhantomJS.Использование в узле 8+ с async / await обеспечивает наиболее удовлетворительный опыт очистки.

Хотя Puppeteer немного тяжелее на оборудовании.

Рассмотрим пример получения содержимого страницы:

const puppeteer = require('puppeteer');

puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.goto('https://angular.io/', {waitUntil : 'networkidle2'});
  const contents = await page.content();
  console.log(contents);
  await browser.close();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...