Как спарсить сайты с помощью PhantomJS

Демистификация PhantomJS

PhantomJS - это "безголовый" веб-браузер. Это означает, что в нем нет графического интерфейса пользователя (GUI), вместо этого он работает только на основе скриптов (что делает его более компактным, быстрым и, следовательно, более эффективным). С его помощью можно автоматизировать различные задачи с использованием JavaScript (JS), например, тестирование кода или сбор данных. 

Начинающим пользователям рекомендуем сначала установить PhantomJS на свой компьютер с помощью команды 'npm' в CLI. Это можно сделать, выполнив следующую команду:

npm install phantomjs -g 

Теперь команда 'phantomjs' будет доступна для использования.

Плюсы и минусы использования PhantomJS для сбора данных 

PhantomJS имеет много преимуществ, в том числе и то, что он "безголовый", что, как я уже объяснял выше, делает его более быстрым, поскольку для тестирования или получения информации не нужно загружать графику. 

PhantomJS можно эффективно использовать для выполнения :

1.Захвата экрана 

PhantomJS позволяет автоматизировать процесс захвата и сохранения PNG, JPEG и даже GIF. Эта функция значительно упрощает выполнение работ по обеспечению внешнего пользовательского интерфейса/опыта. Например, можно выполнить командную строку: Phantomjs amazon.js, чтобы собрать изображения списков товаров конкурентов или убедиться, что списки товаров вашей компании отображаются правильно. 

2.Автоматизации страниц

Это основное преимущество PhantomJS, поскольку оно помогает разработчикам сэкономить массу времени. Запуская командные строки типа Phantomjs userAgent.js, разработчики могут писать и проверять JS-код применительно к конкретной веб-странице. Основное преимущество экономии времени заключается в том, что этот процесс можно автоматизировать и выполнять его без необходимости открывать браузер.

3.Тестирования

PhantomJS выгодно использовать при тестировании сайтов, поскольку он упрощает процесс, подобно другим популярным инструментам веб-парсинг, таким как Selenium. Безголовый просмотр без графического интерфейса означает, что сканирование на наличие проблем может происходить быстрее, а коды ошибок обнаруживаются и передаются на уровне командной строки. 

Разработчики также интегрируют PhantomJS с различными типами систем непрерывной интеграции (CI) для тестирования кода до его запуска в эксплуатацию. Это помогает разработчикам исправлять ошибки в реальном времени, обеспечивая более плавное функционирование проектов.

4.Мониторинга сети / Сбора данных

PhantomJS также может быть использован для мониторинга сетевого трафика/активности. Многие разработчики программируют его таким образом, чтобы с его помощью можно было собирать целевые данные, такие как:

  • Производительность конкретной веб-страницы
  • Добавление/удаление строк кода
  • Данные о колебаниях цен на акции 
  • Данные о влиятельности/вовлеченности при парсинге сайтов типа TikTok.

К недостаткам использования PhantomJS относятся:

  • Он может быть использован злоумышленниками для проведения автоматизированных атак (в основном благодаря тому, что в нем не используется пользовательский интерфейс) 
  • При тестировании полного цикла, сквозном тестировании и функциональном тестировании могут возникать сложности.

Пошаговое руководство по сбору данных с помощью PhantomJS

PhantomJS широко популярен среди разработчиков NodeJS, поэтому мы приводим пример его использования в среде NodeJS. В примере показан процесс получения HTML-содержимого из URL.

Шаг первый: Настройка package.json и установка пакетов npm 

Создайте папку проекта и файл "package.json" в ней.

{
"name": "phantomjs-example",
"version": "1.0.0",
"title": "PhantomJS Example",
"description": "PhantomJS Example",
"keywords": [
  [ "пример фантома"
],
"main": "./index.js",
"scripts": {
"inst": "rm -rf node_modules && rm package-lock.json && npm install",
"dev": "nodemon index.js"
},
"dependencies": {
"phantom": "^6.3.0"
}
}

Затем выполните в терминале следующую команду: $ npm install. Она установит Phantom в локальную папку проекта "node_modules".

Шаг второй: Создание JS-скрипта Phantom

Создайте JS-скрипт и назовите его "index.js".

const phantom = require('phantom');

const main = async () => {
  const instance = await phantom.create();
  const page = await instance.createPage();
  await page.on('onResourceRequested', function(requestData) {
    console.info('Requesting', requestData.url);
  });

  const url = 'https://example.com/'; 
  console.log('URL::', url);

  const status = await page.open(url);
  console.log('STATUS::', status);

  const content = await page.property('content');
  console.log('CONTENT::', content);

  await instance.exit();
};

main().catch(console.log);

Шаг третий: Запуск JS-скрипта

Чтобы запустить скрипт, выполните в терминале команду: $ node index.js. В результате вы получите необходимые вам данные в виде HTML-содержимое.

Автоматизация данных: Более простые альтернативы ручному парсингу

Когда речь идет о масштабном парсинге данных, некоторые компании могут предпочесть использовать альтернативы PhantomJS. 

К ним относятся:

  • Прокси-серверы: Веб-парсинг с использованием прокси-серверов может быть полезен тем, что позволяет собирать данные в масштабе, отправляя бесконечное число одновременных запросов. Прокси-серверы также могут помочь в решении проблемы блокировки целевых сайтов, например, ограничения скорости или блокировки по геолокации. В этом случае для маршрутизации запросов данных компании могут использовать мобильные и жилые IP-адреса/устройства в зависимости от страны/города, что позволяет получать более точные данные о пользователях (например, цены конкурентов, рекламные кампании и результаты поиска Google).
  • Готовые к использованию наборы данных: Наборы данных - это, по сути, "информационные пакеты", которые уже собраны и готовы к передаче алгоритмам/группам для немедленного использования. Как правило, они включают информацию с целевого сайта и обогащены информацией с соответствующих сайтов в Интернете (например, информация о товарах в соответствующей категории у нескольких продавцов и на различных торговых площадках eCom). Наборы данных также могут периодически обновляться для обеспечения актуальности всех точек данных. Основным преимуществом является отсутствие затрат времени/ресурсов на сбор данных, а значит, больше времени можно потратить на анализ данных и создание ценности для клиентов.
  • Полностью автоматизированная среда Web Scraper IDE: Web Scraper IDE - это настраиваемое решение для сбора данных с нулевым кодом и нулевой инфраструктурой. Сборщики данных позволяют компаниям стать активными участниками процесса сбора данных без головной боли, связанной с разработкой и сопровождением программного/аппаратного обеспечения. Трехэтапный процесс включает в себя выбор целевого сайта, времени сбора данных (в реальном времени или по расписанию), выбор формата вывода (JSON, CSV, HTML или Microsoft Excel) и доставку данных в удобное для вас место (webhook, электронная почта, Amazon S3, Google Cloud, Microsoft Azure, SFTP или API).