PHP - обработка скрапированной страницы - PullRequest
0 голосов
/ 14 февраля 2011

Я использовал предыдущие темы о том, как успешно очистить веб-страницу с помощью cURL и PHP. Мне удалось заставить эту часть работать нормально, и мне нужно обработать некоторую информацию со страницы, которая не имеет идентифицируемых классов / разметки, которую я мог бы легко использовать. Пример кода у меня есть:

<h3>Building details:</h3>
<p>Disabled ramp access<br />
  Male, female and disabled toilets available</p>
  <br/>
  <p><strong>Appointment lead times:</strong></p>
  <p><strong>Type 1</strong>:&nbsp; 8 weeks<br />
  <strong>Type 2</strong>:&nbsp;5 weeks<br />
  <strong>Type 3</strong>:&nbsp;3 weeks<br />
  <strong>Type 4</strong>:&nbsp;3 weeks
</p>

Что мне нужно сделать, так это получить количество недель, в течение которых проводятся различные типы встреч, в основном, типа 1. Иногда сроки выполнения заказов недоступны и указывают:

<p><strong>Appointment lead times:</strong></p>
<p><strong>Type 1</strong>:&nbsp; No information available<br />

Я рассмотрел несколько методов, RegEx, Simple DOM Parser и т. Д., Но на самом деле не нашел решения для того, чего я пытаюсь достичь.

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

используйте http://php.net/manual/en/book.tidy.php для преобразования в действительный xml, тогда вы можете легко запросить с помощью xpath через simplexml http://www.w3schools.com/php/php_xml_dom.asp

1 голос
/ 14 февраля 2011

При таких вещах это может стать грязным.Вы должны найти какой-то пункт в коде, чтобы надежно разбить его на части.У вашего образца есть одно пятно, которое я вижу: Type 1</strong>:&nbsp;.Итак, я бы сделал это:

$parts = explode('Type 1</strong>:&nbsp;', $text);

Теперь у первого бита $ parts [1] будет либо ваш таймфрейм, либо сообщение без информации.Давайте используем <br /> в конце, чтобы нарезать его:

if (count($parts) == 2) {
  $parts = explode('<br />', $parts[1]);
  $parts = trim(str_replace(' weeks', '', $parts[0]));
}

Теперь у $ parts есть наше сообщение или наш таймфрейм в виде числа.is_numeric покажет путь!Это грязный метод, но очистка данных на странице обычно такова.Не забудьте проверить результаты каждого шага, прежде чем предположить, что вы подходите для следующего.

...