Собственные XML-расширения
Я предпочитаю использовать одно из собственных XML-расширений , поскольку они поставляются в комплекте с PHP, как правило, быстрее, чем все сторонние библиотеки, и дают мне полный контроль.потребность в разметке.
Расширение DOM позволяет работать с XML-документами через API DOM с PHP 5. Это реализацияобъектная модель документов W3C Core Level 3, интерфейс, независимый от платформы и языка, который позволяет программам и сценариям динамически получать доступ и обновлять содержимое, структуру и стиль документов.
DOM способен выполнять синтаксический анализи изменение реального (сломанного) HTML, и он может выполнять запросов XPath .Он основан на libxml .
Требуется некоторое время для продуктивной работы с DOM, но это время того стоит IMO.Поскольку DOM является независимым от языка интерфейсом, вы найдете реализации на многих языках, поэтому, если вам нужно изменить язык программирования, скорее всего, вы уже знаете, как использовать DOM API этого языка.
AБазовый пример использования можно найти в Получение атрибута href элемента A , а общий концептуальный обзор можно найти в DOMDocument в php
КакИспользование расширения DOM широко освещалось в StackOverflow , поэтому, если вы решите использовать его, вы можете быть уверены, что большинство проблем, с которыми вы столкнулись, могут быть решены путем поиска / просмотра переполнения стека.
Расширение XMLReader представляет собой синтаксический анализатор XML.Читатель действует как курсор, идущий вперед по потоку документов и останавливающийся на каждом узле в пути.
XMLReader, как и DOM, основан на libxml.Я не знаю, как вызвать модуль HTML Parser, так что скорее всего, использование XMLReader для анализа поврежденного HTML может быть менее надежным, чем использование DOM, где вы можете явно указать ему использовать модуль синтаксического анализа HTML libxml.
БазовыйПример использования можно найти по адресу , получающему все значения из тегов h1 с использованием php
Это расширение позволяет создавать парсеры XMLа затем определить обработчики для различных событий XML.Каждый синтаксический анализатор XML также имеет несколько параметров, которые можно настраивать.
Библиотека синтаксического анализатора XML также основана на libxml и реализует XML-синтаксический анализатор в стиле SAX .Это может быть лучшим выбором для управления памятью, чем DOM или SimpleXML, но с ним будет сложнее работать, чем с парсером, реализованным XMLReader.
Расширение SimpleXML предоставляет очень простой и удобный в использовании набор инструментов для преобразования XML в объект, который можно обрабатывать с помощью обычных селекторов свойств и итераторов массива.
SimpleXML - это опция, когда вы знаете, что HTML является верным XHTML.Если вам нужно разобрать неработающий HTML, даже не рассматривайте SimpleXml, потому что он захлебнется.
Базовый пример использования можно найти по адресу Простая программа для узла CRUD и значений узлов xml-файла и есть множество дополнительных примеров в руководстве по PHP .
Сторонние библиотеки (на основе libxml)
Если вы предпочитаете использовать сторонние библиотекиlib, я бы предложил использовать библиотеку, которая на самом деле использует DOM / libxml снизу вместо анализа строки.
FluentDOM предоставляет jQuery-подобный свободный XML-интерфейс для DOMDocument в PHP.Селекторы пишутся в XPath или CSS (используя конвертер CSS в XPath).Текущие версии расширяют DOM, реализуя стандартные интерфейсы, и добавляют функции из DOM Living Standard.FluentDOM может загружать форматы, такие как JSON, CSV, JsonML, RabbitFish и другие.Может быть установлен через Composer.
Wa72 \ HtmlPageDom` - это библиотека PHP для простого манипулирования HTMLдля документов, требующих DomCrawler из компонентов Symfony2 для обхода дерева DOM и расширяет его, добавляя методы для манипулирования деревом DOM документов HTML.
phpQuery (не обновлялся годами)
phpQuery - это API-интерфейс Document Object Model (DOM), управляемый селектором на стороне сервера, основанный на сервере и основанный на jQuery JavaScript Library, написанный на PHP5 и обеспечивающий дополнительный интерфейс командной строки (CLI)).
См. Также: https://github.com/electrolinux/phpquery
Zend_Dom предоставляет инструменты для работы с документами и структурами DOM.В настоящее время мы предлагаем Zend_Dom_Query, который предоставляет унифицированный интерфейс для запросов к документам DOM с использованием селекторов XPath и CSS.
QueryPath - это PHP-библиотека для манипулирования XML и HTML.Он предназначен для работы не только с локальными файлами, но и с веб-службами и ресурсами базы данных.Он реализует большую часть интерфейса jQuery (включая селекторы в стиле CSS), но он сильно настроен для использования на стороне сервера.Может быть установлен через Composer.
fDOMDocument расширяет стандартный DOM для использования исключений во всех случаях ошибок вместо предупреждений или уведомлений PHP,Они также добавляют различные пользовательские методы и ярлыки для удобства и упрощения использования DOM.
сабля / xml являетсябиблиотека, которая оборачивает и расширяет классы XMLReader и XMLWriter для создания простой системы отображения "xml to object / array" и шаблона проектирования.Написание и чтение XML является однопроходным и, следовательно, может быть быстрым и требовать мало памяти для больших XML-файлов.
FluidXML - этоPHP-библиотека для манипулирования XML с помощью лаконичного и свободного API.Он использует XPath и гибкий шаблон программирования, чтобы быть веселым и эффективным.
Сторонний (не на основе libxml)
Преимущество использования DOM / libxml заключается в том, чточто вы получаете хорошую производительность из коробки, потому что вы основаны на собственном расширении.Однако не все сторонние библиотеки идут по этому пути.Некоторые из них перечислены ниже
- HTML DOM Parser, написанный на PHP5 +, позволяет очень просто управлять HTML!
- Требуется PHP 5 +.
- Поддерживает недопустимый HTML.
- Поиск тегов на странице HTML с селекторами, как у jQuery.
- Извлечение содержимого из HTMLв одну строку.
Я вообще не рекомендую этот парсер.Кодовая база ужасна, а сам парсер довольно медленный и требует много памяти.Возможны не все селекторы jQuery (такие как дочерние селекторы ).Любая из библиотек на основе libxml должна легко превзойти это.
PHPHtmlParser - это простой, гибкий HTML-анализатор, который позволяет вам выбирать тегииспользуя любой селектор CSS, например, JQuery.Цель состоит в том, чтобы помочь в разработке инструментов, которые требуют быстрого и простого способа просмотреть html, независимо от того, действителен он или нет!Первоначально этот проект поддерживался sunra / php-simple-html-dom-parser, но поддержка, похоже, прекратилась, поэтому этот проект - моя адаптация его предыдущей работы.
Опять же, я бы не советовалэтот парсер.Это довольно медленно с высокой загрузкой процессора.Также нет функции очистки памяти созданных объектов DOM.Эти проблемы особенно характерны для вложенных циклов.Сама документация является неточной и написанной с ошибками, без ответов на исправления с 14 апреля.
- Универсальный токенизатор и HTML / XML/ RSS DOM Parser
- Возможность манипулировать элементами и их атрибутами
- Поддерживает недопустимые HTML и UTF8
- Может выполнять расширенные CSS3-подобные запросы к элементам (например, jQuery - поддерживаются пространства имен)
- HTML-код beautifier (например, HTML Tidy)
- Сократить CSS и Javascript
- Сортировка атрибутов, изменение регистра символов, правильное отступление и т. Д.
- Расширяемый
- Анализ документов с использованием обратных вызовов на основе текущего символа / токена
- Операции, разделенные вменьшие функции для легкого переопределения
- Быстро и просто
Никогда не использовал его.Не могу сказать, хорошо ли это.
HTML 5
Вы можете использовать вышеприведенное для анализа HTML5, но могут быть причуды из-за разметкиHTML5 позволяет.Таким образом, для HTML5 вы хотите рассмотреть возможность использования выделенного парсера, например
html5lib
Реализации Python и PHP парсера HTML на основе спецификации WHATWG HTML5для максимальной совместимости с основными настольными веб-браузерами.
Мы можем увидеть больше выделенных парсеров после завершения HTML5.Также есть блог от W3 под названием How-To для разбора html 5 , который стоит проверить.
WebServices
Если вы не чувствуетеподобно программированию на PHP, вы также можете использовать веб-сервисы.В общем, я нашел очень мало полезности для них, но это только я и мои варианты использования.
Внешний интерфейс ScraperWiki позволяет извлечьданные в форме, которую вы хотите использовать в Интернете или в ваших собственных приложениях.Вы также можете извлечь информацию о состоянии любого скребка.
Регулярные выражения
Last и наименее рекомендуемые , вы можете извлечь данные из HTML с помощью регулярные выражения .В целом использование регулярных выражений в HTML не рекомендуется.
Большинство фрагментов, которые вы найдете в Интернете для соответствия разметке, являются хрупкими.В большинстве случаев они работают только для очень конкретного фрагмента HTML.Крошечные изменения разметки, такие как добавление пробелов где-либо, добавление или изменение атрибутов в теге, могут привести к сбою RegEx, если он написан неправильно.Вы должны знать, что делаете, прежде чем использовать RegEx в HTML.
HTML-парсеры уже знают синтаксические правила HTML.Регулярные выражения должны преподаваться для каждого нового RegEx, который вы пишете.RegEx хороши в некоторых случаях, но это действительно зависит от вашего варианта использования.
Вы можете писать более надежные парсеры , но писать полный и надежный пользовательский парсерс регулярными выражениями - это пустая трата времени, когда вышеупомянутые библиотеки уже существуют, и гораздо лучше справляются с этим.
Также см. Синтаксический анализ HTML The Cthulhu Way
Книги
Если вы хотите потратить немного денег, взгляните на
Я не связан с PHP Architect или авторами.