Парсинг с препятствиями: как преодолеть защиту и собрать нужные данные (наш опыт)

Парсинг с препятствиями: как преодолеть защиту и собрать нужные данные (наш опыт)

Каждый проект в нашей компании — это новая история, полный вызовов и открытий. Один из таких кейсов, который надолго запомнился нашей команде, пришел от клиента, желающего собрать данные о недвижимости с защищенного сайта. Задача была не только сложной, но и увлекательной. Наш программист Алексей решил эту головоломку, и вот его рассказ о том, как все происходило.

Начало пути: знакомство с сайтом

"Когда я впервые зашел на сайт, казалось, что это обычный портал с объявлениями. Но, как только начал разбираться, оказалось, что он защищен не только CAPTCHA, но и динамическими токенами, которые обновляются на каждом запросе. Это был вызов, но мы любим такие задачи", — делится Алексей.

Первым шагом было разобраться в механике работы сайта. Мы использовали инструмент DevTools в браузере, чтобы проанализировать запросы, которые отправляет сайт при загрузке страниц.

Обход CAPTCHA: искусственный интеллект в действии

Сайт использовал Google reCAPTCHA v2, и нам пришлось подключить сторонний сервис для распознавания CAPTCHA. Однако, чтобы минимизировать запросы к сервису и ускорить процесс, мы реализовали предиктивный подход.

Фрагмент кода обработки CAPTCHA выглядел так:

function solveCaptcha($captchaImage) { $apiKey = "YOUR_API_KEY"; $url = "https://captcha-solver.com/api/solve"; $response = file_get_contents($url . "?key={$apiKey}&image=" . base64_encode($captchaImage)); $result = json_decode($response, true); return $result['solution'] ?? null; }

Каждый раз мы проверяли, нужна ли CAPTCHA, а если да, то отправляли ее на решение и аккуратно обрабатывали ответ.

Токены и их динамика

Следующим препятствием стали динамические токены, которые обновлялись в фоне. Мы обратили внимание, что сайт использует скрытый запрос для генерации токена. Восстановить логику работы токена помог анализ JavaScript-кода сайта.

"Это было похоже на охоту за привидениями. Каждую функцию нужно было понять, связать с остальными и выяснить, где генерируется токен. У нас ушло три дня на то, чтобы найти уязвимое место," — вспоминает Алексей.

Вот пример кода для автоматизации запроса токенов:

function fetchDynamicToken($sessionId) { $ch = curl_init("https://example.com/api/get-token"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, ['session_id' => $sessionId]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); return $data['token'] ?? null; }

Мы научились получать токены на лету и внедрили их в каждый запрос, чтобы сайт «думал», что с ним работает реальный пользователь.

Обработка данных: структуризация сложных таблиц

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

"Для клиента важно было получить данные в формате JSON с четким разграничением полей. Мы использовали регулярные выражения и XPath для извлечения нужной информации."

Пример функции для обработки таблиц:

function parseTable($htmlContent) { $dom = new DOMDocument(); @$dom->loadHTML($htmlContent); $xpath = new DOMXPath($dom); $rows = $xpath->query("//table[@class='data-table']//tr"); $data = []; foreach ($rows as $row) { $cells = $xpath->query("./td", $row); $data[] = [ 'title' => $cells->item(0)->nodeValue ?? '', 'price' => $cells->item(1)->nodeValue ?? '', 'location' => $cells->item(2)->nodeValue ?? '' ]; } return $data; }

Результат: миллионы строк данных и довольный клиент

После недельной работы команда завершила проект. Итог — тысячи уникальных объектов недвижимости были собраны, упорядочены и переданы клиенту в формате JSON.

"Это был сложный проект, но именно такие задачи вдохновляют. Мы доказали, что даже самые сложные сайты можно покорить с помощью опыта и современных технологий. Клиент остался доволен, и это главное!" — подытоживает Алексей.

Выводы

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

Если ваш бизнес столкнулся с задачей извлечения данных, команда ParseForge готова принять этот вызов. Мы не просто соберем данные — мы сделаем это эффективно, безопасно и с учетом всех нюансов.

11
реклама
разместить
Начать дискуссию