хотите помочь? Вот ваши варианты:","Crunchbase","О нас","Спасибо всем за потрясающую поддержку!","Быстрые ссылки","Партнерская программа","Премиум","ProxyScrape премиум-проба","Проверка прокси-сервера онлайн","Типы прокси","Страны-посредники","Примеры использования прокси-сервера","Важно","Политика использования файлов cookie","Отказ от ответственности","Политика конфиденциальности","Условия и положения","Социальные сети","Facebook","LinkedIn","Twitter","Quora","Telegram","Дискорд","\n © Copyright 2025 - Thib BV | Brugstraat 18 | 2812 Mechelen | Belgium | VAT BE 0749 716 760\n"]}
Веб-скрепинг стал незаменимым инструментом для разработчиков и аналитиков данных, которым необходимо извлекать и анализировать информацию из Интернета. Отслеживаете ли вы цены на товары, собираете данные для исследований или создаете индивидуальную приборную панель - веб-скрепинг предлагает безграничные возможности.
Если вы любитель PHP, Goutte - это фантастическая библиотека, которую стоит рассмотреть для ваших потребностей в веб-скреппинге. Goutte легкая, удобная и мощная, сочетающая в себе возможности HTTP-клиента Guzzle и DomCrawler от Symfony для плавного и эффективного веб-скраппинга.
В этом руководстве вы узнаете об основах веб-скраппинга на PHP с помощью Goutte - отустановки и первого скрипта до продвинутых техник, таких как обработка форм и пагинация.
Goutte завоевала популярность среди разработчиков по ряду причин, что делает ее одной из самых популярных библиотек для скраппинга на PHP:
Независимо от того, новичок ли вы в PHP или опытный разработчик, Goutte обеспечивает идеальный баланс между простотой и мощностью.
Прежде чем приступать к кодированию, убедитесь, что для этого есть все необходимые условия:
Чтобы установить Goutte, просто выполните следующую команду в терминале:
composer require fabpot/goutte
После установки убедитесь, что библиотека доступна, потребовав автозагрузку Composer в вашем проекте:
require 'vendor/autoload.php';
Теперь вы готовы приступить к скрапбукингу!
Давайте начнем с простого примера. С помощью Goutte мы выберем заголовок веб-страницы. Ниже приведен базовый скрипт:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
// Initialize Goutte Client
$client = new Client();
// Send a GET request to the target URL
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract the title of the page
$title = $crawler->filter('title')->text();
echo "Page Title: $title\n";
// Extract the titles of the first 5 books
echo "First 5 Book Titles:\n";
$crawler->filter('.product_pod h3 a')->slice(0, 5)->each(function ($node) {
echo "- " . $node->attr('title') . "\n";
});
?>
Выход:
Название страницы: Все товары | Книги для скрапбукинга - Песочница
Первые 5 названий книг:
- Свет на чердаке
- Tipping the Velvet
- Soumission
- Острые предметы
- Sapiens: Краткая история человечества
Это так просто! С помощью всего нескольких строк кода вы можете получить и отобразить название
тег любой веб-страницы.
После того как вы научились получать данные с веб-страницы, следующий шаг - извлечение конкретных данных, например ссылок или содержимого из определенных элементов HTML.
Следующий скрипт извлекает href
атрибуты всех <a>
теги на веб-странице:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
Это вернет все гиперссылки, присутствующие на странице.
Goutte позволяет легко извлекать или анализировать данные из HTML с помощью класс
или ID
селекторы. В этом примере мы будем использовать Книги для соскабливания сайта. В частности, мы будем собирать информацию о каждой книге, поскольку все они имеют один и тот же класс, подставка для продуктов
. Вот как это выглядит на сайте:
Вот пример того, как этого можно добиться с помощью Goutte:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
// Extract elements with class 'product_pod'
$products = $crawler->filter('.product_pod')->each(function ($node) {
return $node->text();
});
// Print all extracted product details
foreach ($products as $product) {
echo $product . "\n";
}
Теперь давайте рассмотрим, как осуществлять навигацию или пагинацию между страницами. На странице примера, которую мы используем, есть кнопка "Далее", которая позволяет перейти к следующей странице. Мы воспользуемся этой кнопкой для реализации постраничной навигации.
Сначала мы определим местоположение кнопки с помощью ее класс
атрибут, имеющий значение следующий
. Внутри этого элемента есть <a>
тег, содержащий URL следующей страницы. Извлекая этот URL, мы можем использовать его для отправки нового запроса и плавного перехода на следующую страницу.Вот внешний вид и структура HTML следующий
Кнопка на странице.
Вот как выглядит код, с помощью которого это достигается:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Handle pagination using the 'next' button
while ($crawler->filter('li.next a')->count() > 0) {
$nextLink = $crawler->filter('li.next a')->attr('href');
$crawler = $client->request('GET', 'https://books.toscrape.com/catalogue/' . $nextLink);
// Extract and print the current page URL
echo "Currently on: " . $crawler->getUri() . "\n";
}
При таком подходе можно автоматизировать переход между страницами и продолжать собирать данные.
Goutte также умеет работать с формами. Чтобы продемонстрировать эту функциональность, мы воспользуемся этим сайтом, который имеет одно поле ввода, как показано на изображении ниже:
Вот как выглядит код для отправки этой формы:
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.scrapethissite.com/pages/forms/');
// Submit the search form with a query
$form = $crawler->selectButton('Search')->form();
$form['q'] = 'Canada';
$crawler = $client->submit($form);
// Extract and print the results
$results = $crawler->filter('.team')->each(function ($node) {
return $node->text();
});
foreach ($results as $result) {
echo $result . "\n";
}
Этот скрипт заполняет поле формы с именем q
со значением скраппинг
и отправляет его. Отсюда можно извлекать содержимое страницы с результатами поиска, как в предыдущих примерах.
Всегда добавляйте обработку ошибок, чтобы справиться с непредвиденными ситуациями, такими как неудачное подключение к сети или несуществующие URL-адреса.
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
try {
$crawler = $client->request('GET', 'https://invalid-url-example.com');
echo "Page title: " . $crawler->filter('title')->text();
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage();
}
}
Веб-скраппинг всегда должен выполняться этично и ответственно. Файл `robots.txt`- это простой текстовый файл, используемый веб-сайтами для связи с веб-краулерами, в котором указывается, к каким частям сайта можно или нельзя получить доступ. Прежде чем приступать к скраппингу, важно проверить файл `robots.txt`, чтобы убедиться, что вы следуете правилам сайта и соблюдаете его условия. Игнорирование этих рекомендаций может привести к юридическим и этическим проблемам, поэтому всегда уделяйте этому шагу первостепенное внимание в процессе скраппинга.
Подробнее о robots.txt
здесь.
Будьте вежливы и не отправляйте слишком много запросов за короткий промежуток времени, так как это может перегрузить сервер и нарушить его работу для других пользователей. Рекомендуется делать небольшую задержку между каждым запросом, чтобы минимизировать нагрузку на сервер и обеспечить эффективную обработку трафика. Выполнение этих шагов не только помогает поддерживать стабильность работы сервера, но и демонстрирует ответственное и внимательное отношение к использованию общих ресурсов.
sleep(1); // Подождите 1 секунду между запросами
Веб-скрейпинг - мощный инструмент для эффективного сбора данных, но он требует ответственного и вдумчивого подхода, чтобы избежать распространенных подводных камней и обеспечить этичное использование. Придерживаясь лучших практик, таких как соблюдение условий обслуживания веб-сайтов, использование соответствующих задержек между запросами и инструментов, способных работать с динамическим контентом, вы сможете создать скрепер, который будет эффективно работать, минимизируя при этом воздействие на серверы. Кроме того, проверка сертификатов HTTPS и учет соображений безопасности защитят ваш скрепер и все собираемые им данные. При правильном планировании и исполнении веб-скраппинг может стать бесценным ресурсом для исследований, анализа и инноваций.