CoderCastrov logo
CoderCastrov
Парсер

Как парсить веб-сайт с использованием PHP CURL в фреймворке Laravel

Как парсить веб-сайт с использованием PHP CURL в фреймворке Laravel
просмотров
3 мин чтение
#Парсер

Привет, сегодня я хочу поделиться информацией о парсинге данных с использованием PHP CURL в Laravel. В этом руководстве я хочу рассмотреть конкретный случай - парсинг данных с веб-сайта https://decisiondata.org/tv-internet-by-zip/01001-internet/ и получение некоторых данных оттуда, таких как название города, название провайдера интернета и процентное соотношение каждой услуги. Затем я экспортирую эти данные в файл Excel с таким форматом:

Хорошо, вот пошаговая инструкция в этом руководстве:

Установка нового проекта Laravel

Первый шаг - установить фреймворк Laravel. В этом руководстве я использую Laravel 6. Установить его можно с помощью Composer следующим образом:

composer create-project --prefer-dist laravel/laravel php_scraping

После успешной установки у нас будет структура исходных файлов проекта, которая выглядит следующим образом:

Установка библиотеки Laravel Excel

Эта библиотека уже очень популярна. Она помогает нам легко экспортировать данные в файл Excel. Вы можете прочитать документацию по этой библиотеке на https://docs.laravel-excel.com/3.1/getting-started/

Я использую Composer для ее установки. Откройте терминал и перейдите в директорию вашего проекта, затем введите:

Теперь мы можем посмотреть на наш файл composer.json, и библиотека уже установлена там.

Библиотека Laravel Excel уже установлена

Установка библиотеки PHP Simple DOM Parser

Следующим шагом нам необходимо установить библиотеку PHP Simple DOM Parser, чтобы помочь нам получить нужный нам элемент HTML и его значение. Эта библиотека полезна и позволяет легко получать элемент HTML по классу или идентификатору, подобно JQuery.

Вы можете прочитать документацию по этой библиотеке на https://github.com/Kub-AT/php-simple-html-dom-parser

Мы можем установить ее с помощью Composer с помощью команды

composer require kub-at/php-simple-html-dom-parser

и наш файл composer.json уже обновлен следующим образом

Библиотека PHP Simple HTML DOM Parser уже установлена

Давайте напишем PHP Curl

Давайте начнем кодировать PHP Curl для парсинга веб-сайта. Мы можем начать с создания папки "Exports" внутри папки "app", а затем создать файл "DataExport.php" внутри папки "Exports". Теперь у нас будет такая структура:

Структура файлов

Затем откройте файл DataExport.php и создайте функцию для парсинга данных веб-сайта, например:

Вы можете ознакомиться с библиотекой php simple html dom parser, чтобы узнать больше об этом. Вы можете использовать код выше, чтобы найти элемент html с определенным идентификатором или классом, например, эту строку кода:

$dom->find('section.internet-data > div.et_column_last > ul > li > p')

Как и в случае с JQuery, это очень просто, чтобы получить данные из любого элемента html. После получения элемента мы можем обработать его, получить текст и сохранить его в базе данных или экспортировать в файл Excel.


Теперь у нас уже есть данные, следующий шаг - экспорт их в файл Excel. В этом руководстве я использовал способ экспорта данных из представления Laravel, как описано в документации https://docs.laravel-excel.com/3.1/exports/from-view.html

Создайте функцию вот так:

Вызов функции process и возврат в представление Laravel

Нам нужно создать представление "excel_report.blade.php" внутри папки resources/views, вот так:

excel_report.blade.php

Теперь последний шаг - нам нужно создать контроллер, чтобы вызвать библиотеку Laravel Excel, вот так:

ScrapingController.php

Хорошо, теперь мы готовы запустить наш скрипт. Мы можем ввести следующую команду в нашем терминале:

php artisan serve

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

Готово, теперь мы успешно спарсили веб-сайт. Вы можете получить полную версию исходного кода этого проекта в моем репозитории https://github.com/juangsalaz/php-scraping

Надеюсь, этот учебник будет полезен и поможет вам всем :)

Спасибо