Очистка грязного HTML-сайта с помощью PHP - PullRequest
0 голосов
/ 13 сентября 2010

Я в следующей ситуации. Я пытаюсь преобразовать грязный очищенный 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, но не знаю, как получить следующего брата и проверить, новый ли это день недели, новые данные таблицы или новая неделя и т. Д.

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

Спасибо.

Ура, Dandoen

Ответы [ 4 ]

1 голос
/ 13 сентября 2010

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

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

1 голос
/ 13 сентября 2010

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

http://php.net/tidy

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

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

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

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

0 голосов
/ 16 сентября 2010

Самый «подверженный ошибкам» метод IMHO - это очистить с помощью реального браузера, что довольно легко, если использовать Selenium RC для удаленного управления браузером.Посмотрите мой пример кода, чтобы очистить Google с помощью jQuery: http://github.com/tszming/Selenium-Google-Scrapper.

Большая часть содержимого может быть извлечена всего несколькими строками кода.

0 голосов
/ 13 сентября 2010

Вам нужны службы преобразования xsl и xslt.

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

...