Опыт программиста ParseForge: сложный заказ на парсинг данных на PHP

Опыт программиста ParseForge: сложный заказ на парсинг данных на PHP

Работа программистов ParseForge – это не просто написание кода. Это настоящее искусство решать сложные задачи бизнеса. Сегодня мы поделимся одной из историй, произошедших с нашим ведущим разработчиком Иваном, который выполнял заказ на парсинг для крупной компании, занимающейся исследованием рынка.

Задача: собрать данные о глобальных трендах

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

Но были нюансы:

  • Большие объемы данных. Ежедневно нужно было обрабатывать тысячи страниц.
  • Разнообразие источников. Некоторые сайты имели сложную динамическую загрузку, другие защищались от парсинга.
  • Требование точности. Клиенту были нужны только свежие данные, поэтому задача включала фильтрацию устаревшей информации.

Этап 1. Подготовка: анализ источников и планирование

Иван начал с детального изучения всех сайтов, предоставленных клиентом. Он отметил, что:

  • У 60% сайтов использовалась защита в виде CAPTCHA.
  • 30% источников подгружали контент через JavaScript, а не напрямую из HTML.
  • Некоторые данные, например цены, шли в виде JSON-запросов, что открывало дополнительные возможности для оптимизации.

После анализа Иван выбрал следующий стек технологий:

  • PHP – для основного парсинга.
  • cURL – для выполнения HTTP-запросов.
  • phpQuery – для парсинга HTML.
  • Symfony DomCrawler – для более сложных случаев.
  • Redis – для временного хранения данных и управления очередями.

Этап 2. Разработка: решение технических сложностей

1. Обход защиты сайтов

Иван столкнулся с CAPTCHA на большинстве сайтов. Чтобы её обойти, он настроил автоматическое решение через сторонний сервис (2Captcha). Вот пример кода, который использовался:

function solveCaptcha($imageBase64) { $apiKey = 'API_КЛЮЧ'; $url = 'https://2captcha.com/in.php'; $response = file_get_contents($url . '?key=' . $apiKey . '&method=base64&body=' . urlencode($imageBase64)); return $response; // Возвращает ID задачи }

Этот подход позволил обходить капчи менее чем за 10 секунд.

2. Работа с динамическими сайтами

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

use Nesk\Puphpeteer\Puppeteer; $puppeteer = new Puppeteer(); $browser = $puppeteer->launch(); $page = $browser->newPage(); $page->goto('https://example.com', ['waitUntil' => 'networkidle2']); $html = $page->content();

Это решение помогло собрать данные даже с самых защищённых ресурсов.

3. Работа с JSON API

На некоторых сайтах вместо парсинга HTML удалось вытащить данные через запросы к внутренним API. Это ускорило процесс и уменьшило нагрузку.

$ch = curl_init('https://example.com/api/products'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $data = json_decode($response, true);

Этап 3. Тестирование и оптимизация

Иван провёл тестирование, чтобы убедиться, что парсер работает корректно на всех сайтах. Основное внимание он уделил:

  • Скорости обработки. Были внедрены параллельные запросы с использованием многопоточности.
  • Корректности данных. Скрипт проверял данные на валидность перед сохранением в базу.
  • Защите от блокировок. Иван использовал ротацию IP через прокси-сервисы.

Этап 4. Интеграция с клиентской системой

Собранные данные передавались клиенту через REST API. Иван разработал интерфейс, который позволял клиенту выбирать фильтры для выгрузки данных.

Вот пример эндпоинта, который предоставлял данные:

$app->get('/api/trends', function(Request $request, Response $response) { $params = $request->getQueryParams(); $data = fetchDataFromDatabase($params); return $response->withJson($data); });

Результат

После запуска системы клиент получил мощный инструмент для анализа трендов:

  • 50+ сайтов парсились ежедневно.
  • Объём данных — 100 000 записей в месяц.
  • Точность данных — 99.8%.

Эта система позволила клиенту занять лидирующие позиции на рынке аналитики, а мы гордимся тем, что внесли свой вклад в их успех.

Выводы

История Ивана – это лишь один из примеров того, как ParseForge помогает клиентам справляться с вызовами. Благодаря опыту наших программистов и современным технологиям, мы готовы решать даже самые сложные задачи.

Хотите обсудить ваш проект? Мы готовы к новым вызовам!

Начать дискуссию