2010-09-13 4 views
0

Я в следующей ситуации. Я пытаюсь преобразовать беспорядочный scraped html-код в красивую и аккуратную структуру xml.Скребок грязного веб-сайта html с PHP

Неполный 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

+1

Возможный дубликат [Скрап-содержимое веб-страницы] (http://stackoverflow.com/questions/584826/scrape-web-page-contents) –

ответ

1

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

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

+0

Я сделал то, что вы предлагали, использовал аккуратно, чтобы привести в порядок. Но оттуда я снова застрял, как это отражено в моем вопросе, в html, который я пытаюсь разобрать, нет реальной «древовидной» структуры. Таким образом, использование DomDocument - это то, где я уже был с простым классом html dom. Спасибо вам за ваш ответ, но, к сожалению, это потребует от меня потратить несколько часов и попробовать всевозможные вещи :( – dandoen

1

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

http://php.net/tidy

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

Edit:

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

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

0

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

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