CAPSOLVER
Блог
Веб-скреппинг с помощью Cheerio и Node.js 2024

Веб-скреппинг с помощью Cheerio и Node.js 2024

Logo of Capsolver

Nikolai Smirnov

Software Development Lead

17-Jun-2024

Веб-скрейпинг – мощная техника извлечения данных с веб-сайтов, широко используемая в анализе данных, маркетинговых исследованиях и агрегировании контента. В 2024 году использование Cheerio и Node.js для веб-скрейпинга продолжает оставаться популярным и эффективным подходом. В этой статье будет подробно рассмотрен процесс использования Cheerio и Node.js для веб-скрейпинга, предлагая исчерпывающее руководство и практический пример.

Оглавление

  • Что такое Cheerio?
  • Предварительные требования
  • Настройка проекта
  • API селекторов Cheerio
  • Написание скрипта для скрейпинга
  • Запуск скрипта
  • Проблемы веб-скрейпинга с Cheerio
  • Обработка CAPTCHA в веб-скрейпинге
  • Обработка динамических страниц
  • Заключение

Что такое Cheerio?

Cheerio – это быстрая, гибкая и легкая реализация jQuery, специально разработанная для серверных приложений. Он позволяет разработчикам анализировать и манипулировать HTML-документами, используя знакомый синтаксис, подобный jQuery, в среде Node.js. В отличие от инструментов на основе браузера, Cheerio не выполняет фактическую отрисовку веб-страниц, а напрямую манипулирует строками HTML, что делает его исключительно эффективным для многих задач скрейпинга. Кстати, Puppeteer – отличная альтернатива для скрейпинга с использованием Cheerio.

Предварительные требования

Прежде чем погружаться в код, убедитесь, что у вас установлены Node.js и npm (Node Package Manager) на вашем компьютере. Если они еще не установлены, вы можете скачать и установить их с официального сайта Node.js.

Настройка проекта

Шаг 1: Создание новой директории проекта

Сначала создайте новую директорию для вашего проекта и инициализируйте её как проект Node.js:

mkdir web-scraping
cd web-scraping
npm init -y

Флаг -y автоматически отвечает "да" на все запросы, создавая файл package.json с настройками по умолчанию.

Шаг 2: Установка зависимостей

Затем установите необходимые зависимости, включая axios для выполнения HTTP-запросов и cheerio для парсинга HTML:

npm install axios cheerio

Страдаете от постоянных неудач в решении раздражающих CAPTCHA?

Откройте для себя автоматическое решение CAPTCHA с использованием AI-платформы CapSolver!

Получите ваш Бонусный Код для лучших решений CAPTCHA; CapSolver: WEBS. После его активации вы получите дополнительные 5% бонуса после каждой пополнения, неограниченно

API селекторов Cheerio

Cheerio – это быстрая, гибкая и легкая реализация основного jQuery, разработанная специально для сервера. Он позволяет использовать синтаксис, подобный jQuery, для манипулирования HTML-документами в среде Node.js.

Вот подробное объяснение API селекторов Cheerio с примерами кода:

  1. Загрузка HTML-документа:

    const cheerio = require('cheerio');
    const html = `
      <html>
        <head>
          <title>Пример</title>
        </head>
        <body>
          <h1 class="title">Привет, мир!</h1>
          <div id="content">
            <p>Это абзац.</p>
            <a href="https://example.com">Ссылка</a>
          </div>
        </body>
      </html>
    `;
    const $ = cheerio.load(html);
  2. Выбор элементов:

    • Выбор по элементу:

      const h1 = $('h1'); // Выбрать все элементы <h1>
      console.log(h1.text()); // Вывод: Привет, мир!
    • Выбор по классу:

      const title = $('.title'); // Выбрать элементы с классом "title"
      console.log(title.text()); // Вывод: Привет, мир!
    • Выбор по ID:

      const content = $('#content'); // Выбрать элемент с id="content"
      console.log(content.html()); // Вывод: <p>Это абзац.</p><a href="https://example.com">Ссылка</a>
    • Выбор по атрибуту:

      const link = $('a[href="https://example.com"]'); // Выбрать элемент <a> с указанным атрибутом href
      console.log(link.text()); // Вывод: Ссылка
  3. Перемещение и манипулирование элементами:

    • Перемещение по элементам:

      $('p').each((index, element) => {
        console.log($(element).text()); // Вывод текста каждого элемента <p>
      });
    • Изменение содержимого элемента:

      $('h1.title').text('Новый заголовок'); // Изменение текста элемента <h1>
      console.log($('h1.title').text()); // Вывод: Новый заголовок
    • Добавление и удаление элементов:

      $('#content').append('<p>Еще один абзац.</p>'); // Добавление нового элемента <p> внутри #content
      console.log($('#content').html()); // Вывод: <p>Это абзац.</p><a href="https://example.com">Ссылка</a><p>Еще один абзац.</p>
      
      $('a').remove(); // Удаление всех элементов <a>
      console.log($('#content').html()); // Вывод: <p>Это абзац.</p><p>Еще один абзац.</p>

Эти примеры иллюстрируют, как можно использовать API селекторов Cheerio для выбора, перемещения и манипулирования HTML-элементами, аналогично jQuery, но в среде Node.js.

Написание скрипта для скрейпинга

Создайте файл с именем scraper.js в директории вашего проекта. Этот файл будет содержать скрипт для скрейпинга данных с целевого веб-сайта. Добавьте следующий код в scraper.js:

const axios = require('axios');
const cheerio = require('cheerio');

// Целевой URL
const url = 'https://example.com';

async function fetchData() {
  try {
    // Выполнение HTTP-запроса для получения HTML-контента
    const { data } = await axios.get(url);
    // Загрузка HTML-документа в Cheerio
    const $ = cheerio.load(data);

    // Извлечение данных из HTML
    const title = $('title').text();
    const headings = [];
    $('h1, h2, h3').each((index, element) => {
      headings.push($(element).text());
    });

    // Вывод извлеченных данных
    console.log('Заголовок:', title);
    console.log('Заголовки:', headings);
  } catch (error) {
    console.error('Ошибка при получении данных:', error);
  }
}

fetchData();

Объяснение кода

  1. Импорт модулей: Скрипт начинается с импорта модулей axios и cheerio.
  2. Определение целевого URL: Определен URL веб-сайта, с которого будет происходить скрейпинг.
  3. Получение данных: Функция fetchData выполняет HTTP GET запрос к целевому URL с использованием axios. Ответные данные (HTML-контент) затем загружаются в Cheerio.
  4. Парсинг HTML: Используя синтаксис, подобный jQuery, Cheerio извлекает содержимое тегов <title>, <h1>, <h2> и <h3>.
  5. Вывод результатов: Извлеченные данные выводятся в консоль.

Запуск скрипта

Чтобы выполнить скрипт для скрейпинга, выполните следующую команду в терминале:

node scraper.js

Если все настроено правильно, вы должны увидеть заголовок веб-страницы и содерж

имое всех тегов заголовков, напечатанных в консоли.

Проблемы веб-скрейпинга с Cheerio

Несмотря на преимущества Cheerio для веб-скрейпинга, он также имеет свои собственные проблемы, с которыми могут столкнуться разработчики:

  1. Динамические веб-сайты и JavaScript: Одна из основных проблем с Cheerio – это обработка динамических веб-сайтов, которые сильно зависят от JavaScript. Современные веб-сайты часто используют JavaScript для динамической загрузки контента после первоначальной загрузки страницы. Поскольку Cheerio парсит статичный HTML, он может не захватить динамически сгенерированный контент, что может ограничить эффективность скрейпинга.

  2. Меры против скрейпинга: Веб-сайты используют различные методы противодействия скрейпингу для предотвращения автоматического извлечения данных:

    • CAPTCHA: Основная проблема, с которой вы можете столкнуться в скрейпинге, предназначена для различия людей и ботов, требуя от пользователей выполнения таких задач, как распознавание изображений или ввод текста.
    • Блокировка IP: Веб-сайты могут блокировать IP-адреса, связанные с активностью скрейпинга, чтобы предотвратить чрезмерные запросы.
    • Обнаружение User-Agent: Обнаружение нестандартных или подозрительных user-agents помогает веб-сайтам выявлять и блокировать скрейперы.
    • Динамические веб-страницы: Веб-сайты, использующие динамическое генерацию контента с помощью JavaScript, могут представлять проблемы, так как контент может быть недоступен через статический парсинг Cheerio.

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

Обработка CAPTCHA в веб-скрейпинге

CAPTCHA представляет значительную проблему в веб-скрейпинге, так как они предназначены для различения людей и ботов. При встрече с ними ваш скрипт для скрейпинга должен решить их для эффективного продолжения. Для масштабных проектов веб-скрейпинга такие решения, как CapSolver, предлагают высокую точность и быстрое решение CAPTCHA.

Интеграция решений CAPTCHA

Различные сервисы для решения CAPTCHA можно интегрировать в ваши скрипты для скрейпинга. Здесь мы сосредоточимся на CapSolver:

Шаг 1: Регистрация в CapSolver

Для начала перейдите на панель управления CapSolver и зарегистрируйтесь.

Шаг 2: Получите ваш API-ключ

После регистрации получите ваш API-ключ на домашней странице панели управления.

CapSolver API Key

Пример кода для интеграции CapSolver

Интеграция CapSolver в ваш проект веб-скрейпинга или автоматизации проста. Ниже приведен пример на Python, демонстрирующий использование API CapSolver:

# pip install requests
import requests
import time

# TODO: установите вашу конфигурацию
api_key = "YOUR_API_KEY"  # ваш API-ключ CapSolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # reCAPTCHA site key целевого сайта
site_url = ""  # URL целевого сайта

def solve_captcha():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Не удалось создать задачу:", res.text)
        return
    print(f"Получен taskId: {task_id} / Получение результата...")

    while True:
        time.sleep(3)  # задержка
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" или resp.get("errorId"):
            print("Решение не удалось! Ответ:", res.text)
            return

captcha_token = solve_captcha()
print(captcha_token)

Этот скрипт иллюстрирует, как использовать API CapSolver для решения задач reCAPTCHA. Интеграция такого решения в ваши проекты скрейпинга повышает эффективность за счет автоматизации решения CAPTCHA, что упрощает процесс извлечения данных.

Обработка динамических страниц

Для веб-страниц, которые загружают контент динамически с помощью JavaScript, вам может потребоваться использовать безголовый браузер, такой как puppeteer. Puppeteer может имитировать реального пользователя, просматривающего веб-страницы, что позволяет вам скрейпить контент, который появляется только после выполнения JavaScript.

Пример с Puppeteer

Вот краткий пример использования Puppeteer вместе с Cheerio:

const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

async function fetchData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  const content = await page.content();
  const $ = cheerio.load(content);

  const title = $('title').text();
  const headings = [];
  $('h1, h2, h3').each((index, element) => {
    headings.push($(element).text());
  });

  console.log('Заголовок:', title);
  console.log('Заголовки:', headings);

  await browser.close();
}

fetchData();

Этот скрипт запускает безголовый браузер, переходит по целевому URL и извлекает HTML-контент после выполнения JavaScript. Затем он использует Cheerio для парсинга HTML и извлечения необходимых данных.

Заключение

Веб-скрейпинг с использованием Cheerio и Node.js – мощное сочетание для эффективного извлечения данных с веб-сайтов. Синтаксис, подобный jQuery, делает Cheerio удобным для навигации и манипулирования HTML-документами, а Node.js предоставляет надежную среду для выполнения HTTP-запросов и обработки данных.

Однако разработчики должны быть осведомлены о проблемах, связанных с динамическим контентом и мерами против скрейпинга, такими как CAPTCHA. Интеграция решений, таких как CapSolver, может помочь преодолеть эти препятствия, обеспечивая эффективность и надежность ваших скриптов для скрейпинга.

Надеюсь, эта статья поможет вам начать веб-скрейпинг в 2024 году и предоставит полезные данные для ваших проектов!

Ещеe

Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга
Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга

Откройте для себя сильные стороны и различия между Scrapy и Selenium для веб-скреппинга. Узнайте, какой инструмент лучше всего подходит для вашего проекта и как справиться с такими проблемами, как CAPTCHA.

The other captcha
Logo of Capsolver

Nikolai Smirnov

25-Jul-2024

API против парсинга
API против парсинга: лучший способ получения данных

Разберитесь в различиях, плюсах и минусах веб-скрапинга и API-скрапинга, чтобы выбрать лучший метод сбора данных. Изучите CapSolver для решения задач, связанных с ботами.

The other captcha
Logo of Capsolver

Nikolai Smirnov

16-Jul-2024

Использование Selenium и C# для автоматизации вызовов CAPTCHA
Использование Selenium и C# для автоматизации вызовов CAPTCHA

В конце этого урока вы будете иметь полное представление о том, как решить CAPTCHA с помощью Selenium C#.

The other captcha
Logo of Capsolver

Nikolai Smirnov

11-Jul-2024

Что такое Puppeteer
Что такое Puppeteer и как его использовать для веб-скрапинга | Полное руководство 2024

Это полное руководство расскажет о том, что такое Puppeteer и как эффективно использовать его для веб-скрапинга

The other captcha
Logo of Capsolver

Nikolai Smirnov

10-Jul-2024

Что такое веб-скрейпинг
Что такое веб-скрейпинг | Распространенные случаи использования и проблемы

Познакомьтесь с веб-скреппингом: узнайте о его преимуществах, легко справляйтесь с проблемами и развивайте свой бизнес с помощью CapSolver.

The other captcha
Logo of Capsolver

Nikolai Smirnov

05-Jul-2024

CapSolver Dashboard 3.0!
Повышайте уровень с CapSolver Dashboard 3.0!

CapSolver Dashboard 3.0 обновлён с улучшенным взаимодействием и множеством новых функций.

The other captcha
Logo of Capsolver

Nikolai Smirnov

04-Jul-2024