Что такое безголовый браузер? Помогают ли они или мешают экспедиции по сбору данных?
Безголовый браузер - это веб-браузер без графического интерфейса пользователя (GUI). Он не имеет видимого окна или элемента пользовательского интерфейса.
Вы просто используете скрипты для обработки содержимого страницы.
Это означает, что вы можете затевать всякие пакости.
Но сегодня мы поговорим только о "белых" методах.
Что особенного в безголовом браузере?
- Более быстрое взаимодействие с веб-контентом - это значит, что вы можете получить больше нужных данных.
- Не требует большой пропускной способности и времени для загрузки страницы, а значит, вам не придется ждать.
- Звучит круто, в духе "Сонной лощины", что очень круто.
Для чего используется безголовый браузер?
Headless browsers provide easy access to the webpage DOM (document object model), which is helpful for front-end developers using JavaScript frameworks such as AngularJS.
Они также широко используются для загрузки и запуска функциональных веб-страниц на безголовом сервере в процессе автоматизированного тестирования. Это называется тестированием в безголовом браузере.
Тестирование безголовых браузеров
Безголовое тестирование - это техника автоматизации тестирования, используемая для проверки веб-страниц. Программа управляет веб-браузером с помощью автоматики, скриптов или других инструментов без отрисовки графики и выполнения видимых компонентов пользовательского интерфейса. Целью безголового тестирования браузера может быть:
- Проверка достоверности разметки, содержимого и стиля HTML/XHTML-страницы.
- Валидация веб-формы или формы входа в систему.
- Evaluating JavaScript for event handlers and AJAX operations.
Это необходимо для того, чтобы убедиться в том, что динамическое содержимое отображается на экране с правильным позиционированием и т.д.
Безголовые браузеры хорошо сочетаются и с другим программным обеспечением. Помимо тестирования и веб-разработки, они могут облегчить сбор данных.
Безголовый скриптинг браузера
Headless scraping is an automated data extraction technique you can use in conjunction with a web scraper.
Браузер в безголовом режиме:
- Соскабливает веб-сайты и сохраняет веб-данные в локальном каталоге на диске.
- Извлекает несколько страниц с большинства современных веб-сайтов.
- Imitates a user agent profile that is necessary to execute javascript rendering.
- Более эффективное использование аргументов командной строки.
Например, безголовые браузеры обычно используются для поиска данных из онлайн-каталогов, информации о ценах на сайтах электронной коммерции или виджетов/иконок социальных сетей, встроенных в сайт компании.
Какие существуют популярные безголовые браузеры?
Безголовый хром
Безголовая версия браузера Google Chrome.
Безголовый Firefox
A Mozilla project that aims to create a headless build of their latest web browser with enabled support for WebGL and JavaScript.
HtlmUnit
Фреймворк для функционального тестирования, использующий безголовые браузеры для загрузки и проверки веб-страниц.
SimpleBrowser
Безголовый браузер, созданный на базе программного обеспечения Net 4, способный выполнять действия по автоматизации браузера. Он не позволяет использовать JavaScript, но позволяет изменять агент пользователя, реферер, заголовки запросов, значения форм и др. перед отправкой или навигацией.
SlimerJS
Проект Mozilla, направленный на обеспечение работы JavaScript и HTML5 в среде, подобной файловой системе. В качестве ядра он использует Gecko (браузерный движок, лежащий в основе Firefox). Это позволит ему полностью поддерживать все API JavaScript (например, даже если они не реализованы или в чем-то неполны).
ZombieJS
Zombie provides a JavaScript API and uses Chromium. Chromium can run on various web pages, but it is mainly used to test the DOM APIs and website behavior automatically.
Как использовать безголовый просмотр для веб-скрапинга?
Назначение безголового браузера - автоматизация (функциональных тестов, веб-разработки и т.д.). Кроме того, благодаря простоте использования и возможности выполнять задачи без участия человека они являются отличными инструментами для веб-скрапинга.
При использовании безголовых браузеров для веб-скрапинга необходимо передать браузеру список URL-адресов, а затем дождаться его загрузки. При загрузке в безголовый браузер это можно автоматизировать, отправляя команды безголовому браузеру из командной строки.
Он позволяет полностью контролировать, когда и как URL-адреса попадают в безголовый браузер.
Для сбора информации с сайтов с помощью headless-браузера необходимо добавить в приложение библиотеки, чтобы браузер мог взаимодействовать с ними. Это взаимодействие может осуществляться через командную строку или путем подключения к веб-серверу.
Наиболее распространенными библиотеками являются:
Запросы
A necessary Python library to interact with web servers by an HTTP request.
jsdom
Для работы этой библиотеки также необходим пакет jsdom-global, который используется для создания глобальных объектов, необходимых безголовому браузеру.
Puppeteer
The puppeteer library makes it easier to control Chrome and Chromium than other libraries such as Selenium/WebDriver. You can install it with npm or yarn in NodeJS applications to run tests or scrape data from web pages. It provides you with methods to specify the URL, download resources, handle cookies, etc.
Необходимо помнить, что Puppeteer - это библиотека, основанная на обещаниях: Она выполняет асинхронные вызовы к безголовому экземпляру Chrome в моторном отсеке.
Кошмар
This library is used for Electron applications. It provides Electron with automation tools that can be used by an application to drive Electron’s browser process via a remote connection.
Selenium
Существует несколько библиотек для работы с безголовым JavaScript с использованием связки Selenium, таких как webdriver js и selenium-web driver.
Вы, наверное, думаете, что создать библиотеку очень сложно, но это не так. Давайте рассмотрим один пример.
Учебник по основам кукловодства
Сначала необходимо установить Puppeteer в каталог проекта.
Установка Puppeteer
Чтобы использовать Puppeteer в безголовом браузере, выполните команду:
npm i puppeteer
# or "yarn add puppeteer"
Или для получения lite-версии Puppeteer выполните команду:
npm i puppeteer-core
# or "yarn add puppeteer-core"
Как уже говорилось выше, весь код кукловода выполняется в NodeJS. Вы экспортируете его как фабричную функцию, которая возвращает объект с методами для управления Chrome. С его помощью можно создавать новые экземпляры браузера с помощью метода launch, переходить по URL-адресам, обрабатывать события и т.д.
Следующий фрагмент кода предназначен для сценария Puppeteer.
Если вы хотите , перейдите по адресу https://example.com и сохраните снимок экрана под именем example.png:
Сохраните файл под именем example.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Выполнение сценария в командной строке:
node example.js
Если вы хотите создать PDF-файл:
Сохраните файл под именем hn.js.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {
waitUntil: 'networkidle2',
});
await page.pdf({ path: 'hn.pdf', format: 'a4' });
await browser.close();
})();
Неплохое решение, правда?
Приведенный выше пример является лишь одним фрагментом кода. Более подробное руководство по Puppeteer можно найти здесь.
Какие ограничения существуют при использовании веб-скрапера в безголовом браузере?
You generally have less control with a headless server since many tasks require additional plugins or configurations handled by a standard web browser. For example, some headless browsers don’t support CSS selectors, which makes scraping data from the DOM more difficult.
Even though a headless browser is efficient, web blocks may slow you down. Depending on how many pages you plan to scrape, you need to think about using a proxy service. A proxy service will help to save your IP address from a potential block.
Лучшие прокси-серверы для использования в режиме headless
Если все ваши API-вызовы и HTTP-запросы выполняются с одного IP-адреса, то весь процесс будет остановлен.
Лучшими прокси-серверами для использования с веб-скраперами являются вращающиеся прокси. Таким образом, каждый экземпляр браузера имеет свой IP-адрес.
Rotating residential proxies, or backconnect proxies, are ideal for automation testing and web applications that harvest data.
Want to know more about proxies for web scraping with a headless browser? Check out this article on how many proxies you need.
В этой статье мы рассказали о том, что такое безголовые браузеры и почему они могут быть полезны для тех, кто хочет использовать их в качестве инструмента для скраппинга.
Если у вас есть дополнительные вопросы о безголовых браузерах или о чем-либо, связанном с веб-скрапингом, не стесняйтесь оставлять комментарии ниже!
ВОПРОСЫ И ОТВЕТЫ
С чего начать?
Просто выберите безголовый браузер, который хорошо подходит для ваших задач автоматизации веб-деятельности. Существует целый ряд безголовых браузеров, таких как Headless Chromium и SlimerJS. Вам также понадобится библиотека. Например, если вы планируете использовать Chrome, вам необходимо установить библиотеку Puppeteer.
Почему браузер называется "безголовым"?
Безголовый браузер не имеет графического интерфейса пользователя (GLU), единственное, что вы увидите при его работе, - это интерфейс командной строки (CLI). Веб-разработчики используют его для выполнения автоматизированных задач, таких как функциональные тесты и веб-скрапинг.
CLI headless-браузера позволяет загружать веб-сайты и взаимодействовать с ними. По сути, он выступает в роли настраиваемого прокси-сервера между вами и веб-сайтами, которые вы загружаете на свой headless-сервер. Если вы новичок в области веб-скрапинга или безголовых браузеров, эта статья расскажет вам об их основах. Она может оказаться полезной, если вы только начинаете.
Кто создал Headless Chrome?
Headless Chrome - это проект с открытым исходным кодом, возглавляемый компанией Google.
Могу ли я использовать его для целей, отличных от автоматического веб-скрапинга?
Да! С его помощью можно выполнять автоматическое и функциональное тестирование. Прежде чем принять решение о том, какой именно headless-сервер лучше всего отвечает вашим потребностям, следует рассмотреть все возможные варианты.
Поскольку их цель - автоматизация, безголовые браузеры являются отличными инструментами для скраппинга, особенно в сочетании с интерфейсом командной строки.
Можно ли запускать безголовые браузеры из командной строки?
Да. Многие headless-серверы позволяют запускать их из соответствующего CLI или через веб-интерфейс, например Chrome. В некоторых случаях для получения полного контроля над headless-браузером необходимо использовать оба варианта.
Как узнать, работает ли безголовый браузер на моем компьютере?
Вы можете посмотреть, на какой архитектуре работает ваша локальная система, и сравнить ее с архитектурой любого безголового браузера, который вы хотели бы использовать. Некоторые безголовые серверы являются кроссплатформенными или поддерживают несколько архитектур, но не все они работают таким образом. Прежде чем использовать один из них, необходимо проверить это.
Правда ли, что безголовые браузеры не поддерживают CSS-селекторы?
Это справедливо для некоторых (но не для всех) безголовых серверов; в частности, PhantomJS не поддерживает CSS-селекторы, а Headless Chrome - поддерживает. Разработчики каждого безголового браузера могут в любой момент времени добавить и/или убрать различные функции, поэтому всегда следует проверять, прежде чем что-то предполагать.
Работают ли безголовые браузеры с javascript-кодом?
В большинстве случаев безголовые браузеры не испытывают проблем с выполнением javascript-кода. Многие веб-разработчики используют безголовые браузеры для автоматизации своих задач, требуя для их выполнения полной поддержки JavaScript.
Поскольку не все безголовые браузеры поддерживают JavaScript, необходимо изучить каждый из них и определить, будет ли он удовлетворять вашим конкретным потребностям.
Правда ли, что некоторые headless-серверы имеют API?
Yes! Some headless servers have APIs which allow you to utilize them in different ways than simply loading websites through a proxy server. You can check what types of APIs any given headless browser offers by reading up on their documentation. This is a good way of determining whether or not you should use them with web scrapers, especially if a proxy API is available.
Какие безголовые браузеры поддерживают CSS-селекторы?
Headless Chrome currently supports CSS selectors, while PhantomJS’ WebKit engine does not. For more information on system dependencies, you can check out this website.
Почему не все инструменты для веб-скрапинга считаются безголовыми браузерами?
Такие инструменты, как Scrapy, имитируют пользовательский интерфейс (UI) обычного браузера для сбора данных с сайтов. Однако, поскольку эти инструменты не загружают страницы в собственное окно, мы не относим их к безголовым браузерам.
Правда ли, что нельзя использовать безголовые браузеры для сканирования мобильных сайтов?
Не гарантируется, что безголовые браузеры будут работать со всеми страницами сайтов, но большинство из них могут работать нормально. Сайты, предназначенные для мобильных устройств, как правило, не загружаются корректно в безголовых серверах, даже если они могут отобразить страницу.
Могу ли я тестировать свои собственные безголовые браузеры?
Вы должны иметь такую возможность, но нет никакой гарантии, что headless-браузер будет работать. Поскольку каждый headless-сервер обладает различной функциональностью и возможностями, возможно, придется модифицировать свой инструмент, чтобы он работал корректно.
For a basic example, headless Chrome requires Javascript, while PhantomJS requires CORS headers for web pages to load correctly.
Каковы наилучшие методы, которые я могу использовать при скраппинге с помощью безголового браузера?
Целью веб-скрапинга обычно является извлечение данных с полностью или частично недоступных сайтов без ручного ввода каких-либо веб-данных в формы или кнопки.
If you’d like to learn more about how web scraping works, check out this article.
Использование безголового браузера должно быть этичным. Возможность извлекать данные из полностью или частично недоступных страниц - это не обязательно плохо. Однако это может произойти, если владелец сайта не хочет, чтобы вы это делали.
Обязательно перепроверьте все соглашения об условиях предоставления услуг и политике конфиденциальности, прежде чем приступать к соскабливанию страниц какого-либо сайта, поскольку эти условия могут быть изменены без предварительного уведомления.
Какие безголовые браузеры лучше всего подходят для веб-скрапинга?
Headless Chrome и PhantomJS - отличные варианты для веб-скрапинга, поскольку они просты в использовании и относительно быстры.
Почему некоторые разработчики предпочитают использовать безголовый браузер, а не обычный?
Иногда бывает необходимо или удобнее использовать безголовый браузер вместо обычного, но это, как правило, зависит от специфики проекта. Например, вы хотите собрать данные с сайтов, для корректной работы которых требуется Javascript. В этом случае вам будет проще использовать Headless Chrome, чем обычный Google Chrome.
Headless Chrome обладает более широкими возможностями отслеживания, чем другие аналогичные инструменты, что очень удобно при работе с несколькими проектами.