Парсинг данных онлайн-магазина на C#
Сегодня мы научимся парсить любой веб-портал из кода нашего приложения. Для парсинга данных используем язык программирования C#.
Всем привет! Сегодня мы учимся парсить любой веб-портал из кода нашего приложения. Для парсинга данных используем язык программирования C#. Если ваш любимый язык не C#, то не беда — используя данный подход можно решить задачу парсинга на любом современном языке.
Итак, ставим задачу.
Задача: спарсить карточку товара из онлайн магазина baucenter.ru, зная артикул товара.
Что понадобится ?
1. Сниффер HTTPS пакетов. Использую Fiddler.
2. Среда разработки приложения Visual Studio 2019.
Этап 1. Сбор данных сниффером пакетов
Запускаем Fiddler, параллельно открываем браузер и переходим на baucenter.ru. В поле поиска товара вставляем любой известный на данном сайте артикул товара (при открытии любого товара отображается артикул). Использую артикул 416001653.
![Парсинг данных онлайн-магазина на C# 1](https://media.tproger.ru/uploads/2021/09/Screenshot_1-2.png)
Этап 2. Фильтрация пакетов
Из большого количества собранных пакетов полезными являются единицы, остальные просто засоряют список, тем самым затрудняя понимание того, что нужно сделать.
Ненужные пакеты — это:
- Пакеты вида Tunnel to …;
- Изображения и шрифты;
- JavaScript файлы;
- CSS файлы;
- Запросы на другие порталы нежели baucenter.ru.
Удалив ненужное, получаем следующее:
Рисунок 2. Список отфильтрованных пакетов
Этап 3. Анализ отфильтрованных пакетов.
Открыв карточку товара с артикулом 416001653 в браузере, видим карточку товара со всеми данными. Нас интересует название товара и цена.
Название товара: Тумба с раковиной Onika Крит 52 см.
Цена товара: 3390.
В Fiddler через поиск по тексту ищем, в каком запросе есть текст с названием товара, ценой и артикулом. В моём случае это запрос №241. Рассмотрим его.
Обратим внимание, чтобы выполнить данный запрос нужно знать адрес карточки товара https://baucenter.ru/mebel_dlya_vannoy_razmer_50_59sm1217/686594/. А его в данный момент у нас нет.
Снова через поиск по тексту в Fiddler ищем текст: https://baucenter.ru/mebel_dlya_vannoy_razmer_50_59sm1217/686594/. В моём случае этот текст находится в запросе №217.
Рассмотрев данный запрос и ответ веб-сайта на данный запрос (рисунки 4 и 5), делаем следующие выводы:
- в HTML-коде ответа на запрос №217 есть ссылка на карточку товара. Зная эту ссылку, мы из кода программы сделаем туда запрос и получим необходимые данные о товаре (название и цену, например);
- для выполнения запроса №217 нужно знать только артикул товара, а он у нас есть («416001653»);
- чтобы получить карточку товара из кода приложения, нужно сделать 2 запроса: POST-запрос на адрес https://baucenter.ru, передав артикул товара, и GET-запрос на полученный адрес из первого запроса.
Этап 4. Создать классы GetRequest и PostRequest в приложении
Чтобы спарсить данные из приложения, необходимо, чтобы ваше приложение отправило необходимые запросы на веб-портал. Эти запросы должны быть неотличимы от запросов веб-браузера. Для выполнения парсинга данных создадим классы GetRequest и PostRequest.
Данные классы позволяют выполнять Get и Post запросы на веб-порталы. В конструктор класса передается адрес веб-сайта. В свойства класса передаются стандартные заголовки HTTP запроса: Accept, Host, Data, ContentType, Referer, Useragent. Свойство Proxy служит для установки прокси-сервера, через который будет отправлен запрос.
Это нужно для удобной проверки выполнения своего кода, передав в это свойство значение прокси-сервера Fiddler (по умолчанию 127.0.0.1:8888). Таким образом, при выполнении запросов из программы вы увидите запросы в Fiddler и сможете легко понять проблему, если она будет.
Выполнение запроса происходит при вызове метода Run, и передаче в данный метод контейнер куки. Контейнер куки создаёте перед выполнением всех запросов. После выполнения запросов контейнер записывает в себя, полученные от веб-портала куки. Это позволяет выполнять последующие запросы с сохраненными куки-данными.
Результат выполнения запроса записывается в виде текста в свойство Response.
Этап 5. Создание приложения для получения карточки товара
Результат выполнения программы представлен на рисунке 6.
Код приложения можно найти здесь.
Подробное видео разработки данного проекта здесь:
31К открытий33К показов