В этом руководстве мы рассмотрим, почему использование frontend JavaScript может быть не самым оптимальным выбором для веб-скрейпинга, и дадим пошаговое руководство по созданию веб-скрейпера на Node.js с нуля.
Веб-скрепинг с использованием фронтального JavaScript
У фронтального JavaScript есть ограничения, когда речь идет о веб-скреппинге. Во-первых, необходимо выполнять сценарий веб-скреппинга на JavaScript непосредственно из консоли браузера, что невозможно автоматизировать программным путем.
Во-вторых, если вы собираетесь собирать данные с различных веб-страниц, то, как правило, для их получения необходимо использовать AJAX-запросы. Однако необходимо помнить, что веб-браузеры применяют политику одинакового происхождения для AJAX-запросов. Это означает, что с помощью внешнего JavaScript можно обращаться только к веб-страницам одного происхождения.
Чтобы проиллюстрировать это ограничение, рассмотрим простой пример. Предположим, что в данный момент вы посещаете веб-страницу на сайте fineproxy.com. В этом случае ваш внешний JavaScript-скрипт сможет получить только веб-страницы в домене fineproxy.com.
Однако важно отметить, что это не означает, что JavaScript не подходит для веб-ползания. Более того, Node.js позволяет запускать JavaScript на серверах, эффективно обходя вышеупомянутые ограничения.
Теперь давайте рассмотрим, как можно создать JavaScript-веб-скрепер с помощью Node.js.
Пререквизиты
Прежде чем приступать к созданию приложения для веб-скреппинга на Node.js, необходимо убедиться в наличии следующих предпосылок:
- Node.js 18+ с npm 8+: Вы можете использовать любую LTS (Long Term Support) версию Node.js 18+ вместе с npm. Для справки, данное руководство основано на Node.js 18.12 и npm 8.19, которые представляют собой последнюю LTS-версию Node.js, доступную на момент написания статьи.
- Интегрированная среда разработки (IDE), поддерживающая JavaScript: Хотя в данном руководстве в качестве IDE используется Community Edition IntelliJ IDEA, вы можете использовать любую другую IDE, поддерживающую JavaScript и Node.js.
Выполнив эти предварительные условия, вы будете хорошо подготовлены к созданию собственного веб-скрепера с использованием JavaScript и Node.js.
Лучшие JavaScript-библиотеки для веб-скрепинга для Node.js
Давайте рассмотрим некоторые из лучших библиотек JavaScript, предназначенных для веб-скрепинга в среде Node.js:
- Axios: Axios - это удобная библиотека, упрощающая выполнение HTTP-запросов на JavaScript. Она универсальна, способна работать как в браузере, так и в среде Node.js и является одним из наиболее распространенных HTTP-клиентов JavaScript.
- Cheerio: Cheerio - это легкая библиотека, предоставляющая jQuery-подобный API для навигации по HTML- и XML-документам. С помощью Cheerio можно анализировать HTML-документы, выбирать определенные HTML-элементы и извлекать из них данные. По сути, Cheerio представляет собой мощный API для веб-скрепинга.
- Selenium: Selenium - это комплексная библиотека, поддерживающая множество языков программирования и предназначенная в основном для автоматизации тестирования веб-приложений. Она также обладает возможностями "безголового" браузера, что делает ее ценным инструментом для задач веб-скреппинга.
- Playwright: Playwright, разработанный компанией Microsoft, представляет собой универсальный инструмент для создания сценариев автоматизированного тестирования веб-приложений. Он позволяет давать браузеру команды на выполнение определенных действий, что делает его подходящим вариантом для веб-скриптинга, особенно в режиме безголового браузера.
- Puppeteer: Puppeteer, инструмент компании Google, специализируется на автоматизации тестирования веб-приложений. Построенный на базе протокола Chrome DevTools, Puppeteer позволяет программно взаимодействовать с браузером, имитируя действия пользователя. Более подробно о различиях между Selenium и Puppeteer читайте в нашем подробном руководстве.
Построение веб-скрепера на JavaScript в Node.js
В этом разделе вы получите практический опыт создания веб-скрепера на JavaScript в среде Node.js. Задача скрепера будет заключаться в автономном извлечении данных с главной страницы Fineproxy. В этом учебном пособии по скраппингу на Node.js вы узнаете, как выбирать конкретные HTML-элементы на веб-странице, извлекать из них соответствующие данные и преобразовывать полученные данные в более структурированный и удобный для использования формат.
Как соскребать данные с помощью Node.js: пошаговое руководство с примерами
Шаг 1: Настройка среды Node.js
Прежде чем приступить к скраппингу, необходимо настроить среду Node.js. Вот как это можно сделать:
Пример:
# Install Node.js (if not already installed) $ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - $ sudo apt-get install -y nodejs # Check Node.js and npm versions $ node -v $ npm -v
Шаг 2: Создание нового проекта Node.js
Для задачи скраппинга необходимо создать новый проект Node.js. Это поможет вам легко управлять зависимостями.
Пример:
# Create a new directory for your project $ mkdir web-scraper $ cd web-scraper # Initialize a new Node.js project $ npm init -y
Шаг 3: Установка основных пакетов
Для эффективного соскабливания данных вам понадобятся некоторые необходимые пакеты. Мы установим Axios для выполнения HTTP-запросов и Cheerio для разбора HTML.
Пример:
# Install Axios and Cheerio $ npm install axios cheerio
Шаг 4: Выполнение HTTP-запросов с помощью Axios
Axios - это мощная библиотека для выполнения HTTP-запросов. С ее помощью можно получать веб-страницы.
Пример:
const axios = require('axios'); // Make a GET request axios.get('https://example.com') .then((response) => { // Handle the response here }) .catch((error) => { // Handle errors });
Шаг 5: Разбор HTML с помощью Cheerio
Cheerio - это отличная библиотека для разбора HTML. С ее помощью можно выбирать элементы на веб-странице и манипулировать ими.
Пример:
const cheerio = require('cheerio'); // Load HTML content const html = '<h1>Hello, World!</h1>'; const $ = cheerio.load(html); // Select and extract data const heading = $('h1').text(); console.log(heading); // Output: Hello, World!
Шаг 6: Выбор и извлечение данных
Теперь, когда вы умеете анализировать HTML, вы можете выбирать и извлекать определенные данные из веб-страницы.
Пример:
// Select and extract links const links = $('a'); links.each((index, element) => { const link = $(element).attr('href'); console.log(link); });
Шаг 7: Работа с пагинацией
Многие сайты содержат страничное содержимое. Для извлечения данных с нескольких страниц требуется обработка пагинации.
Пример:
// Scrape data from multiple pages async function scrapeMultiplePages() { for (let page = 1; page <= 5; page++) { const response = await axios.get(`https://example.com/page/${page}`); const $ = cheerio.load(response.data); // Extract data from the current page // (Example: scraping a list of articles) } }
Шаг 8: Хранение собранных данных
После сбора данных их необходимо сохранить для дальнейшего использования. Их можно сохранить в файле, базе данных или в облаке.
Пример:
// Save scraped data to a JSON file const fs = require('fs'); const dataToSave = { /* your data here */ }; fs.writeFileSync('data.json', JSON.stringify(dataToSave));
Шаг 9: Обработка ошибок и исключений
Веб-скреппинг не всегда проходит без ошибок. Чтобы обеспечить бесперебойную работу скрепера, необходимо изящно устранять ошибки.
Пример:
// Handle errors when making requests axios.get('https://example.com') .then((response) => { // Handle success }) .catch((error) => { console.error('Error:', error.message); });
Шаг 10: Соблюдайте вежливость и этику
Очень важно быть ответственным скрапером и следовать этическим нормам. Не перегружайте сайты запросами и соблюдайте условия их обслуживания.
Пример:
// Set a delay between requests to be polite const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); async function politeScraping() { for (let page = 1; page <= 5; page++) { await axios.get(`https://example.com/page/${page}`); await delay(1000); // Delay for 1 second between requests } }
Шаг 11: Запустите веб-скрепер
Наконец, пришло время запустить веб-скрепер и проследить за его работой.
Пример:
# Run your Node.js script $ node scraper.js
В этом учебном пособии мы рассмотрели ограничения, связанные с использованием JavaScript для веб-скреппинга во фронтенде, и обсудили, почему Node.js является лучшим выбором. Кроме того, мы рассмотрели основные компоненты, необходимые для создания сценария веб-скрепинга на Node.js, и изучили процесс извлечения данных из Интернета с помощью JavaScript. В частности, мы получили представление о том, как использовать возможности Cheerio и Axios для создания приложения веб-скрепинга на базе JavaScript в Node.js, и проиллюстрировали это на реальном примере. Как вы убедились, поиск информации в Интернете с помощью Node.js может быть выполнен с поразительной эффективностью, зачастую для этого требуется всего несколько строк кода.
Тем не менее, необходимо признать, что веб-скреппинг не всегда может быть простым занятием. Эта сложность обусловлена множеством проблем, которые часто возникают. В частности, все большую озабоченность вызывает распространение средств защиты от скрапинга и ботов. К счастью, существует решение, позволяющее преодолеть эти трудности без особых усилий: использование современного, передового инструмента для борьбы с веб-скреппингом, предлагаемого компанией Fineproxy.
Хорош ли NodeJS для веб-скреппинга?
Да, NodeJS является популярным выбором для веб-скраппинга благодаря своей асинхронной природе, позволяющей осуществлять эффективный и параллельный скрэйпинг. Для анализа и извлечения данных с веб-страниц с помощью NodeJS можно использовать такие библиотеки, как Cheerio или Puppeteer.
Можно ли выполнять веб-скрепинг с помощью JavaScript?
Да, с помощью JavaScript можно выполнять веб-скрепинг.
Работает ли NodeJS с JavaScript?
Да, Node.js работает с JavaScript.
Какой лучший веб-скрапер для JavaScript?
Puppeteer считается одним из лучших инструментов для веб-скрепинга на JavaScript.
Комментарии (0)
Здесь пока нет комментариев, вы можете быть первым!