Очистка грязного html-сайта с помощью PHP

Я в следующей ситуации. Я пытаюсь преобразовать беспорядочный очищенный HTML-код в красивую и аккуратную структуру XML.

Частичный HTML-код очищенного веб-сайта:

<p><span class='one'>week number</span></p>

<p><span class='two'>day of the week</span></p>
<table class='spreadsheet'>
table data
</table>

<p><span class='two'>another day of the week</span></p>
<table class='spreadsheet'>
table data
</table>

<p><span class='one'>another week number</span></p>

ETC

Теперь я хочу создать следующую структуру xml с помощью php:

<week number='week number'>
 <day name='day of the week'>
  <data id='table data'>table data</data>
 </day>

 <day name='another day of the week'>
  <data id='table data'>table data</data>
 </day>
</week>
<week number='another week number'>
 ETC
</week>

Пробовали простой метод html dom, но понятия не имели, как получить следующего брата и проверить, новый ли это день недели, новые данные таблицы или новая неделя и т. Д.

Я, конечно, открыт и для других решений.

Спасибо.

Привет, Дандоэн


person dandoen    schedule 13.09.2010    source источник
comment
Возможный дубликат Очистите содержимое веб-страницы   -  person John Slegers    schedule 25.02.2016


Ответы (4)


Серебряной пули нет. Типичный способ справиться с этим - сначала отфильтровать html через htmltidy, чтобы получить несколько предсказуемый суп тегов, а затем передать его синтаксическому анализатору (например, DomDocument). Затем используйте DomXPath, чтобы выбрать нужные узлы, собрать промежуточную структуру ассоциативных массивов и, наконец, преобразовать ее в выходной XML-документ.

Подсказка: используйте функцию Firebug «Копировать XPath», чтобы получить выражение xpath для узла.

person troelskn    schedule 13.09.2010
comment
Я сделал, как вы предложили, использовал приборку, чтобы привести в порядок. Но с этого момента я снова застрял, как это отражено в моем вопросе, в html нет реальной древовидной структуры, которую я пытаюсь проанализировать. Таким образом, использование DomDocument - это то место, где я уже был с простым классом html dom. В любом случае спасибо за ваш ответ, но, к сожалению, это потребует от меня потратить несколько часов и попробовать все :( - person dandoen; 14.09.2010

Хорошим вариантом является расширение PHP Tidy (также известное как HTML Tidy).

http://php.net/tidy

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

Редактировать:

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

http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php

person Alexandros Vellis    schedule 13.09.2010

Вам нужны услуги трансформации xsl и xslt.

http://en.wikipedia.org/wiki/XSLT

person darpet    schedule 13.09.2010

Метод, наиболее подверженный ошибкам, IMHO - это очистка с помощью реального браузера, что довольно просто, если использовать Selenium RC для удаленного управления браузером. См. Мой пример кода для очистки Google с помощью jQuery: ЗДЕСЬ.

Большую часть содержимого можно извлечь с помощью всего нескольких строк кода.

person tszming    schedule 16.09.2010