Парсинг и обработка вебстраницы на языке php.

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

Другой причиной для таких вещей может быть, например, отсутствие API с исходного сайта. В этом случае это единственный способ получить данные, которые вам нужно обработать. Сегодня я покажу вам, как получить веб-данные с помощью PHP и что это может быть так же просто, как пирог.

Прежде всего, parcingили Вебскрэпинг (на PHP) -это плохо? Делать PHP web scraping не хуже, чем на других языках, просто на парсинг в целом, скорее всего, будут смотреть с презрением производители контента. И это сделает ваш код более хрупким, чем он должен быть, и вообще сделает приложение более сложным для сборки.

Тем не менее, иногда “Webparcing ” — это ваш единственный выбор. Если вы любите PHP и вам нужно сделать parcing, вы находитесь в правильном месте.

Что такое Парсинг?

Веб-пасинг с PHP ничем не отличается от любого другого вида “веб-скребка”. И хотя разные люди имеют в виду разные вещи, когда говорят “веб-скребок”, я имею в виду, что вы извлекаете информацию из HTML веб-страницы, владелец которой не сделал эту информацию доступной в REST, SOAP или GraphQL API. (Как и любой другой вид идентифицируемого дружественного к программированию интерфейса.)

Веб-scraping — это ваш последний выбор, когда кто-то не предоставляет формальный веб-API для доступа к данным.

Причины делать parcing:

Нам нужны данные внутри нашего PHP скрипта
Владелец данных не предоставляет API, с помощью которого мы можем более эффективно получить эти данные
Мы действительно хотим, чтобы их данные были внутри нашего PHP-скрипта

Я дважды «нам нужны эти данные», потому что характерной чертой скриптов веб-скраппера является их хрупкость. Поскольку они получают базовые данные, представленные во внутреннем HTML-коде веб-страницы, они могут сломаться по случайным причинам. Вот почему Intuit (производители Mint, QuickBooks и т. д.) тратят миллионы на свои банковские веб-парсеров каждый год.

Причины не заниматься парсингом

Вот несколько причин, по которым ваш веб-скрэпинг (как только он заработает, а это совсем другая тема…) сломается:

Формат данных теперь представлен по-разному с точки зрения его текстовых строк
Расположение данных на странице перемещается из-за конструктивных соображений
Формат данных хоста (окружающий HTML) перемещается из-за конструктивных соображений
Данные, которые вы пытаетесь очистить, намеренно запутываются его хозяином (вспомните разметку антирекламы Facebook)

Короче говоря, парсинг всегда должен быть последним средством. Если бы они хотели сделать эту информацию доступной для вас, а они могли бы, они бы это сделали. У них действительно может не быть ни технических возможностей, ни интереса. Именно тогда scrapingотлично подходит. Потому что медленный веб-сайт — одна из лучших целей для очистки данных с веб-сайтов с использованием PHP.

Зачем использовать PHP для веб-скрэпинга?

Существует несколько библиотек PHP webscraping. Есть лучшие языки, чем PHP, которые можно использовать для очистки.

Основная причина для выполнения PHP webscraping заключается в том, что вы знаете и любите PHP. Используйте PHP для вашего Web-scraping, если остальная часть вашего приложения (которое будет использовать результат этого парсинга) написана на PHP. Parcingс помошьюPHP не так прост, чтобы использовать его,если вы не знаете PHP. Например, в середине веб-проекта Python. Библиотеки очистки PHP довольно хороши, но они не идеальны.

Какие библиотеки PHP WebScraping вы должны использовать?

Итак, очевидный ответ здесь таков: все, что вам нравится.Каждый использует такой фреймворк PHP scraping, который тебе подходит, нет какого то существенного развития между ними.

Чтобы делать легкие веб-скребки PHP в контексте проекта, можно использовать веб-фреймворк Symfony PHP. Как вариант можно рассмотреть FriendsOfSymfony/Goutte и Symfony/Panther. Но есть много хороших аналогов. В общем, основное различие, которое я бы выделил, заключается между библиотекой PHP webscraping, такой как Panther или Goutte, и библиотекой PHP webrequest, например URL, Guzzle, Requests.

Отличия библиотеки веб-запросов PHP от библиотеки Web-scramling:

Библиотека веб запросов поможет вам делать запросы, используя все основные методы HTTP
Она может дать вам базовый HTML-код страницы, который вы можете разобрать так, как вам хочется
Она не поможет вам разобрать веб-страницу, которую возвращает ваш HTTP-запрос
Не поможет вам сделать серию запросов в последовательности при перемещении через серию веб-страниц, которые вы пытаетесь очистить.

Так что, лучше всего для начала рассчитывать на Гут, Пантера и Laravelчтобы грамотно подойти к PHP парсингу.

Простой парсер на PHP

PHP Simple HTML DOM Parser-это утилита мечты для разработчиков, которые работают как с PHP, так и с DOM, потому что разработчики могут легко найти элементы DOM с помощью PHP. Вот несколько примеров использования PHP Simple HTML DOM Parser:

test_parser.php
rlist(); // begin parsing at rule list
?>
match(ListLexer::LBRACK);
$this->elements();
$this->match(ListLexer::RBRACK);
}
/** elements : element (‘,’ element)* ; */
function elements() {
$this->element();
while ($this->lookahead->type == ListLexer::COMMA ) {
$this->match(ListLexer::COMMA);
$this->element();
}
}
/** element : name | list ; // element is name or nested list */
function element() {
if ($this->lookahead->type == ListLexer::NAME ) {
$this->match(ListLexer::NAME);
}
else if ($this->lookahead->type == ListLexer::LBRACK) {
$this->rlist();
}
else {
throw new Exception(«Expecting name or list : Found » .
$this->lookahead);
}
}
}
?>
Parser.php

input = $input;
$this->consume();
}

/** If lookahead token type matches x, consume & return else error */
public function match($x) {
if ($this->lookahead->type == $x ) {
$this->consume();
} else {
throw new Exception(«Expecting token » .
$this->input->getTokenName($x) .
«:Found » . $this->lookahead);
}
}
public function consume() {
$this->lookahead = $this->input->nextToken();
}
}
?>

Синтаксический анализатор принимает наш язык ввода в качестве аргумента из командной строки. Передача правильной строки синтаксическому анализатору ничего не вернет, так как мы не реализовали никакого кода обработки языка. Передача неправильной строки вызовет исключение.

Код и комментарии не требуют пояснений. Я настроил скрипт таким образом, что получаю одно предупреждение «дайджест», если многие страницы меняются. Скрипт-это самая трудная часть — чтобы запустить скрипт, я настроил задание CRON для запуска сценария каждые 20 минут.

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

Заключение

У меня есть несколько советов, Если вы хотите, чтобы этот вид скрипта обрабатывал одну и ту же страницу все время:

установите заголовок агента пользователя для имитации реального запроса веб браузера
делайте вызов со случайной задержкой чтобы избежать черного списка с веб сервера
используйте PHP 7
постарайтесь максимально оптимизировать скрипт

Вы можете использовать этот скрипт для производственного кода, но, честно говоря, это не самый оптимальный подход.

После работы с кодом вы можете понять, что PHP не очень хороший кандидат для разработки программ такого рода. Даже если вы можете выполнить поставленную задачу, разработка гораздо более сложного дизайна парсера на PHP может оказаться сложной задачей.

Нужен парсинг данных?

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

Написать
img