Веб-скрапинг с jQuery

Веб-скрапинг с jQuery: Полный самоучитель

Здесь я покажу, как собрать веб-скрапер с помощью jQuery. Независимо от того, выполняете ли вы скрапинг на стороне клиента или на стороне сервера, я проведу вас через основные шаги и ключевые концепции. К концу вы уже сможете быстро начать извлекать данные с сайтов! Давайте приступим!

Что такое jQuery?

jQuery jQuery — одна из самых популярных JavaScript-библиотек, используемых для работы с DOM (Document Object Model). Она упрощает такие задачи, как обход и изменение DOM, обработка событий и выполнение AJAX-запросов. jQuery используют для добавления интерактивности сайтам, и она крайне полезна для веб-скрапинга, поскольку позволяет легко выбирать HTML-элементы и извлекать из них содержимое.

You can use jQuery for both client-side and server-side web scraping. In client-side scraping, your web browser executes the scraping code, while in server-side scraping, the scraping process is handled on the server, typically using Node.js. We’ll explore both approaches in this tutorial.

Что такое скрейпинг на стороне клиента?

Скрапинг на стороне клиента означает запуск кода для скрапинга прямо в браузере пользователя. Этот подход реализуется на JavaScript, который позволяет браузеру получить доступ к HTML-коду веб-страницы и извлечь нужные данные. Однако у скрапинга на стороне клиента есть некоторые ограничения, главным образом из-за механизмов безопасности, таких как CORS (Cross-Origin Resource Sharing).

Например, если вы попытаетесь получить данные с другого домена (сайта, который не совпадает с тем, который вы сейчас просматриваете), браузер заблокирует запрос из-за политик CORS. Эти ограничения затрудняют скрапинг на стороне клиента для задач крупномасштабного веб-скрапинга, но он по-прежнему полезен для небольших проектов или когда можно собирать данные с того же домена.

Как собирать данные с веб-страницы с помощью jQuery?

Первое, что нужно сделать, — получить HTML-код веб-страницы, которую вы хотите скрапить. Это делается с помощью HTTP-запроса. jQuery предоставляет простой способ выполнять такие запросы с помощью функции $.get().

Вот пример того, как извлекать данные с веб-страницы:

$.получить("https://example.com", функция(html) {
консоль.журнал(html);
});

Этот код отправляет HTTP GET-запрос по указанному URL и выводит HTML-контент веб-страницы в консоль. Однако если попробовать запустить его на сайте, который не разрешает междоменные запросы, вы столкнетесь с проблемой, известной как ошибка CORS.

Почему нельзя скрапить сайты на стороне клиента?

Проблема CORS возникает из-за того, что современные браузеры внедряют ограничения безопасности, чтобы не позволить вредоносным сайтам красть данные у других. Когда браузер обращается к другому сайту, он добавляет заголовок «Origin», который указывает, откуда идет запрос. Сервер, получающий запрос, проверяет этот заголовок, чтобы понять, поступает ли запрос с разрешенного домена. Если нет, сервер заблокирует запрос.

Эта функция безопасности усложняет скрейпинг на стороне клиента. Чтобы обойти ее, можно использовать прокси-сервер или headless-браузер, но такие решения обычно относятся к скрейпингу на стороне сервера.

Обход ограничений CORS с помощью Web Unlocker от Bright Data

Поскольку скрапинг на стороне клиента ограничен политиками CORS, лучше использовать серверное прокси-решение вроде Web Unlocker от Bright Data.

Почему стоит использовать Web Unlocker?

✅ Обходит ограничения CORS — Получайте данные с любого сайта без браузерных блокировок.
✅ Обходит антибот-защиту — автоматически обрабатывает заголовки, cookies и CAPTCHA.
✅ Нет нужды в ручной ротации прокси — динамически назначает IP-адреса и при необходимости меняет их.
✅ Works Seamlessly with jQuery & Node.js — Fetch data server-side before processing it with jQuery.

How to Use Web Unlocker with jQuery in Node.js

Чтобы интегрировать Web Unlocker в ваш скрапер на стороне сервера, выполните следующие шаги:

1️⃣ Зарегистрируйтесь в Bright Data и получите учетные данные для Web Unlocker.
2️⃣ Install Axios (a popular HTTP client for Node.js):

npm install axios

3️⃣ Измените скрапер так, чтобы он использовал Web Unlocker:

const axios = требуется("axios");

const webUnlockerProxy = "http://username:[email protected]:22225";

async функция scrapeWithWebUnlocker(url) {
    попробуйте {
        const ответ = ожидайте axios.получить(url, {
            прокси: {
                хост: "brd.superproxy.io",
                порт: 22225,
                auth: {
                    username: "your-username",
                    password: "your-password"
                }
            }
        });

        консоль.журнал(response.data); // Process the HTML with jQuery
    } поймать (ошибка) {
        консоль.ошибка("Ошибка при получении данных:", error);
    }
}

scrapeWithWebUnlocker("https://example.com");

How This Works:

  • Запрос проходит через Web Unlocker от Bright Data, обходя CORS и защиту от ботов.
  • The response contains the HTML of the target page , which can then be processed with jQuery in Node.js.
  • Этот метод обеспечивает надежный и масштабируемый скрапинг без риска IP-блокировок и капч.

Server-Side Scraping With jQuery and Node.js

Since client-side scraping is limited by CORS, a more robust approach is to use server-side scraping. This method involves running your scraper on a server that doesn’t have the same restrictions as browsers. Node.js, a JavaScript runtime environment, is perfect for server-side scraping. You can use jQuery with Node.js to scrape web pages without worrying about CORS errors.

How to Use jQuery With Node.js?

To use jQuery in Node.js, you need to install both the jQuery library and a tool called jsdom. jsdom is a JavaScript implementation of the web standards (like the DOM) that runs in Node.js. It essentially simulates a web browser inside your server, allowing jQuery to work as if it were in a real browser environment.

First, you need to set up your Node.js environment. Make sure you have Node.js installed on your system. Then, create a new directory for your project and install the required dependencies.

mkdir my-web-scraper cd my-web-scraper npm init -y
npm install jquery jsdom

Once the packages are installed, you can start using jQuery in your Node.js scraper.

Example: Scraping a Web Page With Node.js and jQuery

Here’s a basic example of how to scrape a webpage using jQuery in Node.js:

const { JSDOM } = требуется("jsdom");
const { окно } = новый JSDOM("", { url: "https://example.com" });
const $ = требуется("jquery")(окно);
$.получить("https://example.com", функция(html) {
консоль.журнал(html);
});

Этот код инициализирует экземпляр jsdom с URL страницы, которую вы хотите парсить. После этого jQuery может взаимодействовать с HTML-документом так же, как в браузере.

Scraping Specific Data

Как только у вас есть HTML-контент страницы, следующий шаг — извлечь нужные данные. Именно здесь jQuery проявляет себя особенно хорошо. Вы можете использовать метод jQuery .find(), чтобы выбрать конкретные элементы, и .text() или .attr(), чтобы извлечь их содержимое.

Let’s say you want to scrape product names, prices, and URLs from an e-commerce site. Вот как можно это сделать:

$.получить("https://example.com/products", функция(html) {
const productElements = $(html).find("li.product");
const products = [];
productElements.each((i, productElementпрокси {
const product = {
name: $(productElement).find("h2").текст(),
price: $(productElement).find(".price").текст(),
url: $(productElement).find("a").attr("href")
};
products.push(product);
});
консоль.журнал(products);
});

В этом примере:

  • Мы используем $.get() для получения HTML-кода страницы товара.
  • Метод .find() ищет все элементы li с классом product.
  • Мы перебираем каждый элемент товара и извлекаем название товара, цену и URL с помощью методов jQuery .text() и .attr().

Это выведет массив объектов товаров, содержащих собранные данные.

Storing Scraped Data

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

To do this, you can use Node.js’s built-in fs (file system) module to write the data to a file.

const fs = требуется("fs");
fs.writeFileSync("products.json", JSON.stringify(products, null, 2));

This code will save the scraped product data to a file called products.json in the current directory.

Advanced Scraping Techniques

Pagination

У многих сайтов контент разбит на страницы, то есть не все данные отображаются на одной странице. Чтобы собрать все данные с сайта с пагинацией, вам нужно будет переходить по нескольким страницам.

В этом случае можно изменить скрапер так, чтобы он переходил по ссылке «Next» или чтобы он формировал URL-адреса для каждой страницы. Вот пример того, как можно собирать данные с нескольких страниц:

функция scrapePage(pageUrl) {
$.получить(pageUrl, функция(html) {
const productElements = $(html).find("li.product");
const products = [];
productElements.each((i, productElementпрокси {
const product = {
name: $(productElement).find("h2").текст(),
price: $(productElement).find(".price").текст(),
url: $(productElement).find("a").attr("href")
};
products.push(product);
});
консоль.журнал(products);
const nextPage = $(html).find(".next-page").attr("href");
если (nextPage) {
scrapePage(nextPage); // Recursively scrape the next page
}
});
}
scrapePage("https://example.com/products?page=1");

Эта рекурсивная функция соберёт данные с текущей страницы, а затем проверит, есть ли ссылка на следующую страницу. Если найдена ссылка «Next», она снова вызовет scrapePage() с URL следующей страницы.

Using Regular Expressions

Иногда вам может понадобиться извлекать с веб-страницы определенные шаблоны данных. Например, если цены товаров представлены в стабильном формате, можно использовать регулярные выражения (regex), чтобы находить и извлекать цены.

Вот пример использования регулярных выражений с jQuery:

$.получить("https://example.com/products", функция(html) {
const prices = новый Set();
$(html).find("span.price").each((i, priceElementпрокси {
const priceText = $(priceElement).текст();
если (/^$d .d{2}$/.test(priceText)) {
prices.add(priceText);
}
});
консоль.журнал(Массив.с сайта(prices));
});

This code uses a regular expression (/^$d .d{2}$/) to match strings that represent prices, like “$69.00”. It stores the matched prices in a Set to ensure uniqueness.

Заключение

In this tutorial, I showed you how to scrape data from websites using jQuery. We looked at both client-side and server-side scraping methods. While client-side scraping has its limits because of security measures like CORS, server-side scraping with jQuery in Node.js lets you avoid these restrictions and scrape data from any site. I also explained how to use jQuery’s DOM traversal methods to extract specific information.

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

Похожие записи