Server parsed html php

Веб-парсинг на PHP: пошаговое руководство

Не знаете, как парсить веб-страницы с помощью PHP? Это единственное руководство, которое вам понадобится!

Зачем использовать PHP

На PHP в настоящее время работает около 40% веб-ресурсов, включая такие сайты, как WordPress и Slack. Это один из самых популярных языков сценариев на стороне сервера, когда речь идет о веб-разработке. Для тех, кто работает с MySQL, их базы данных тесно связаны. Это относительно простой язык для изучения, с хорошей документацией и библиотеками, которые могут сократить время разработки.

Как начать работать с PHP

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

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

Вот пример фрагмента кода, который может появиться в заголовке вашего сайта для парсинга:

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

Прежде чем начать, убедитесь, что на вашем компьютере установлен PHP.

Веб-парсинг на PHP за 3 простых шага

Шаг первый: Сбор кода вашего целевого веб-сайта

Начните с ввода следующего кода:

Что касается конвенций кодирования:

  • «» используются во всей документации по PHP в начале и в конце команд.
  • Вторая строка устанавливает переменную с именем «$ code», которая относится к содержимому рассматриваемого URL-адреса, в этом примере мы будем ориентироваться на: «http://quotes.toscrape.com». Это помогает хранить код URL внутри переменной «$code».

Предпочитаете полностью автоматизированное решение для парсинга?

Шаг второй: Парсинг веб-страницы

Цель работы – собрать все цитаты с этого сайта:

Текст цитаты на сайте цитат

Щелкните правой кнопкой мыши на целевой странице и нажмите «Просмотреть исходный код страницы», откроется новое окно с исходным кодом. В нашем примере все цитаты содержатся в тегах с классом «text» и атрибутом itemprop, также установленным в «text», как показано ниже:

Пример кода цитаты

Мы начнем с использования PHP, чтобы избавиться от всего нежелательного текста в коде, за исключением цитат в тегах , а затем выведем его на экран с помощью функции «echo»:

", "<>", $code); $splitCode = explode(" $final = substr($total, 37); echo $final; ?> 

В строке 2 он заменяет все вхождения «>» в коде на «». Это сделано для того, чтобы его можно было разделить вместе с «, а в строке 11 — закрывающего тега .

Все, что нужно сделать сейчас, это получить текст между этими двумя вхождениями. Для этого создается переменная “i” со значением местоположения переменной открывающего тега. Затем создается переменная для последующего ввода результата. В строке 16 он начинает перебирать каждую букву после открывающего тега, добавляя ее к общему значению, а затем увеличивает переменную «i». После прохождения закрывающего тега цикл останавливается.

Читайте также:  Page Title

Затем он удаляет первые 37 цифр окончательной строки, потому что эти первые 37 цифр находятся в теге, который мы анализируем, — теге . И наконец, он извлекает конечный результат с помощью функции ‘echo’.

Когда вы запустите программу, она будет выглядеть примерно так:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.” 

Это первая цитата, показанная на сайте, которую мы парсим без какого-либо «неудобного для человека» кода.

Шаг третий: Получение читаемого текста

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

", "<>", $code); $splitCode = explode(" // Run the function, then update splitCode to delete the previous occurance // that it can be repeated for the next quote, then loop through 3 times // (You can change how many times): parseCode($splitCode); $splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE); parseCode($splitCode); $splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE); parseCode($splitCode); $splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE); parseCode($splitCode); ?>

Как видите, наш предыдущий код был введен в функцию под названием «parseCode» с параметром «$splitCode», чтобы можно было получить доступ к коду, а затем ‘echo’ результат. Функция «parseCode» запускается в строке 27, а затем в строке 28 наша программа удаляет предыдущее вхождение закрывающего тега, чтобы его можно было повторить. Строки 27 и 28 просто повторяются ~ 3 раза, чтобы программа могла определить шаблон и обнаружить следующее вхождение.

Наконец, мы вводим закрывающий тег как «глобальную переменную» с суперглобальной областью видимости «$ GLOBALS», а в строке 21 мы вводим теги

вокруг каждой строки, которую он возвращает, чтобы он создавал новую строку для каждой новой цитаты. Вот результат:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.” “There are only two ways to live your life. One is as though nothing is a miracle. The Other is as though everything is a miracle.” “Try not to become a man of success. Rather become a man of value.” 

Результат именно то, что мы искали. Никакого кода, только читаемый текст. Этот процесс можно воспроизвести практически для любого целевого сайта, например, для парсинга на eBay целевых точек данных, таких как цены на продукты, обзоры и SKU (единицы хранения).

Подведем итоги

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

Читайте также:  Айди всех цветов html

Источник

Парсинг и обработка веб-страницы на PHP: выбираем лучшую библиотеку

Обложка: Парсинг и обработка веб-страницы на PHP: выбираем лучшую библиотеку

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

В таких случаях перед программистом встает вопрос: какую из десятков библиотек выбрать? В этой статье мы постарались рассмотреть самые популярные варианты и выбрать из них лучший.

Регулярные выражения

Даже не смотря на то, что «регулярки» — это первое, что приходит на ум, использовать их для настоящих проектов не стоит.

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

Вместо «допиливания» своего регулярного выражения при каждом малейшем изменении кода рекомендуем использовать инструменты ниже — это и проще, и удобнее, и надежнее.

XPath и DOM

DOM и XPath не являются библиотеками в привычном смысле этого слова, это стандартные модули, которые встроены в PHP начиная с пятой версии. Именно отсутствие необходимости использовать сторонние решения делает их одними из лучших инструментов для парсинга HTML страниц.

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

Вот, например, код с использованием DOM и XPath, который ищет в разметке все теги и модифицирует их атрибуты src :

$dom = new DOMDocument; $dom->loadHTML($html); $images = $dom->getElementsByTagName('img'); foreach ($images as $image) < $image->setAttribute('src', 'http://example.com/' . $image->getAttribute('src')); > $html = $dom->saveHTML();

Тем не менее, данный вариант не лишен минусов — для парсинга используется движок, в первую очередь предназначенный для работы с XML, а XML и HTML хоть и являются очень похожими языками, но всё же различаются. Из этого вытекают специфические требования к разметке: например, все HTML теги должны быть закрыты.

Simple HTML DOM

Simple HTML DOM — PHP-библиотека, позволяющая парсить HTML-код с помощью удобных jQuery-подобных селекторов.

Она лишена главного недостатка XPath — библиотека умеет работать даже с невалидным HTML-кодом, что значительно упрощает работу. Вы также забудете о проблемах с кодировкой: все преобразования выполняются автоматически.

Как и JQuery, Simple HTML DOM умеет искать и фильтровать вложенные элементы, обращаться к их атрибутам и даже выбирать отдельные логические элементы кода, например, комментарии.

Читайте также:  Validate xml with xsd in java

В этом примере сначала подгружается, а потом модифицируется заранее заготовленный HTML-код: во второй строке происходит добавление атрибута class со значением bar первом попавшемуся элементу div , а в следующей строке мы заменяем текст элемента с id=”world” на foo .

$html = str_get_html('
Hello
World
'); $html->find('div', 1)->class = 'bar'; $html->find('div[id=world]', 0)->innertext = 'foo'; echo $html;

Несмотря на не самую высокую производительность, по сравнению с другими вариантами, Simple HTML DOM имеет самое большое русскоязычное комьюнити и наибольшую распространенность в рунете — для новичков это делает написание кода с её использованием значительно проще.

phpQuery

Как и Simple HTML DOM, phpQuery является PHP вариантом JQuery, но на этот раз более похожим на своего «старшего javascript-брата».

Портировано почти всё, что есть в JS-фреймворке: поддержка селекторов, атрибутов, манипуляций, обхода, плагинов, событий (в том числе имитации кликов и т.д.) и даже AJAX. Использовать можно как через PHP, так и через командную строку в виде отдельного приложения.

Более того, согласно нашим бенчмаркам, phpQuery оказался в 8 (!) раз быстрее Simple HTML DOM.

Вот небольшой пример на phpQuery, в котором происходит обработка заранее выбранных элементов списка ( li ):

foreach(pq('li') as $li) < // Можно вывести различные данные обычным текстом $tagName = $li->tagName; $childNodes = $li->childNodes; // А можно добавить обертку phpQuery (аналог $() в JQuery) и, например, добавить к элементу какой-то класс pq($li)->addClass('my-second-new-class'); >

Подробную документацию и больше примеров найдете на официальной странице в Google Code.

htmlSQL

htmlSQL — экспериментальная PHP библиотека, позволяющая манипулировать HTML-разметкой посредством SQL-подобных запросов.

Простейший пример, извлекающий атрибуты href и title всех ссылок (элементы a ) с классом list :

SELECT href,title FROM a WHERE $class == "list"

Как и с обычными mysql_ функциями, воспользовавшись методами fetch_array() или fetch_objects(), мы можем получить результат выполнения данного запроса в виде привычного ассоциативного массива или объекта.

Стоит также упомянуть о высоком быстродействии htmlSQL: часто она справляется в несколько раз быстрее phpQuery или того же Simple HTML DOM.

Тем не менее, для сложных задач вам может не хватить функциональности, а разработка библиотеки давно прекращена. Но даже несмотря на это, она всё ещё представляет интерес для веб-разработчиков: в ряде случаев значительно удобнее использовать язык SQL вместо CSS-селекторов. Особенно когда вы не знаете, что такое CSS-селекторы 😉

Вывод

В своем мини-исследовании мы пришли к выводу, что в большинстве случаев для парсинга лучше использовать библиотеку phpQuery: она быстрая, функциональная и современная.

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

Что-то ещё?

Для PHP существуют ещё десятки разнообразных библиотек и инструментов для парсинга, но в этой статье мы рассмотрели только самые интересные, функциональные и производительные.

Подробнее о других способах парсинга средствами PHP можно прочитать в соответствующей теме на StackOverflow.

Если вы не используете PHP, то можете ознакомится с кратким списком похожих инструментов для других языков программирования:

.NET: Html Agility Pack;

Источник

Оцените статью