Доброго времени суток дорогие друзья и сегодня мы рассмотрим такое явление как веб- скрапинг . Более подробную информацию о нем вы можете найти в интернете. Но в общем понимании скрапинг это сбор информации с ресурсов. По сути это улучшенная форма парсинга. Ну давайте отойдем от терминологии и перейдем к делу.
В качестве инструмента для скрапинга я буду использовать известную библиотеку goutte. Найти документацию и скачать ее вы можете на https://github.com/FriendsOfPHP/Goutte.
Установить ее вы также можете через composer. Просто создав файл composer.json со следующим содержимым:
{
"require": {
"fabpot/goutte": "v3.2.2"
}
}
версию подбирайте под себя. И выполнив команду composer install.
Данная библиотека через программный код php позволяет заходить на страницы, собирать данные сайта по DOM архитектуре, переходить по ссылкам, заполнять и отправлять формы, отправлять POST, GET запросы и многое другое.
use Goutte\Client;
use GuzzleHttp\Client as GuzzleClient;
require __DIR__."/vendor/autoload.php";
$client = new Client();
Здесь мы подключили библиотеку goutte и создали объект $client. Все, теперь мы можем с ней работать и расмотрим первый метод с помощью которого мы можем обходить страницы.
$crawler = $client->request('GET', 'https://youtube.com');
var_dump($crawler);
С помощью метода request() мы можем отправлять запросы на сервер. Первым параметром мы передаем тип запроса, в а вторым адрес куда отправляем запрос. В нашем случае мы с помощью запроса get перешли на сайт https://youtube.com. В качестве результата нам вернулся объект. Если мы хотим посмотреть содержимое страницы к которой мы обращались, то нам достаточно воспользоваться методом html()
$crawler = $client->request('GET', 'https://youtube.com');
echo $crawler->html();
В результате у нас вернется содержимое страницы https://youtube.com. Если мы хотим зайти на youtube и перейти по ссылке с названием 'В тренде':
$crawler = $client->request('GET', 'https://youtube.com');
$crawler = $client->click($crawler->selectLink('В тренде')->link());
echo $crawler->html();
Нам вернется страница с трендами youtube. Здесь для клика по ссылке мы воспользовались методом click() В качестве аргумента которого передали объект ссылки с названием 'В тренде'.
И это далеко не все возможности которые предоставляет нам данная библиотека.
Напоследок давайте рассмотрим процесс авторизации с помощью goutte.
$client = new Client();
$crawler = $client->request('GET', 'https://www.yandex.ru/');
$form = $crawler->selectButton('Войти')->form();
$crawler = $client->submit($form, array('login' => 'login@yandex.ru', 'passwd' => 'xxxxxxx'));
$crawler->filter('.b-messages__subject')->each(function ($node) {
echo $node->text()."<br/><br/><br/><br/>";
});
Разбираю по порядку. В данном примере я зашел на страницу https://www.yandex.ru/ . Нашел кнопку для отправки формы (Войти) и с помощью метода submit() отправил ее. В методе submit() я указал кнопку по клике которой форма будет отправляться, и массив в качестве ключей которого идут названия полей формы, а значений содержимое полей.
В итоге я зашел в свою yandex почту. C помощью метода filter() перебрал все элементы с классом b-messages__subject и вывел их содержимое.
В итоге с помощью данного кода я получил все заголовки своих писем которые находятся на почтовом ящике yandex .
На этом данная статья подошла к концу. Конечно мы рассмотрели небольшую часть возможностей библиотеки goutte так как для этого существует документация.
Но зато теперь вы имеете общее представление о том что такое веб скрапинг.
А я же желаю вам успехов и удачи! Пока!