Извлечь определенную часть из html-документа, php cURL, php, preg_match

Я пытаюсь извлечь некоторую информацию с веб-страницы, используя php cURL+preg_match или любую другую функцию, но по некоторым причинам она вообще не работает. Например, с этой страницы, Я хочу извлечь заголовок «Сдается дом с 4 спальнями, Кэролайн Плейс, Бэйсуотер, W2», цену «2300» и описание, начинающееся со слов «Этот фантастический...» и заканчивающееся на «(Обведите кружком и Окружные линии). Я пытался использовать php cURL + dom, но получаю много ошибок, таких как «htmlParseEntityRef: ожидание ';' в Entity, строка: 243", и результат не отображается

Также я пытался использовать preg_match или preg_match_all, но тоже не работает.

Очень простой пример будет высоко оценен!


person Michael    schedule 04.05.2010    source источник
comment
Я думаю, что решение DOM не работает из-за того, что страница недействительна xhtml или xml   -  person Michael    schedule 04.05.2010
comment
Возможно, опубликуйте свои регулярные выражения, которые вы пробовали, но они не работают. Эти узоры выглядят довольно прямолинейно.   -  person serg    schedule 04.05.2010
comment
Не используйте регулярное выражение для анализа HTML, вместо этого используйте парсер HTML dom, который поддерживает недопустимые HTML.   -  person Pedro Lobito    schedule 18.08.2011


Ответы (4)


Очень простой пример будет высоко оценен

Чтобы ответить на часть регулярного выражения:

preg_match('!<title>(.*)</title>!s', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
<title>

            4 bedroom


        house


    to rent in Caroline Place, Bayswater, W2 through Foxtons (Property to rent)</title>
<meta name="keywords" content="Houses" />', $matches);
print_r($matches);

/* output:
Array
(
    [0] => <title>

            4 bedroom


        house


    to rent in Caroline Place, Bayswater, W2 through Foxtons (Property to rent)</title>
    [1] => 

            4 bedroom


        house


    to rent in Caroline Place, Bayswater, W2 through Foxtons (Property to rent)
)
*/

s в конце регулярного выражения помещает синтаксический анализатор во что-то (неуместно) называемое single-line mode.

person webbiedave    schedule 04.05.2010
comment
Спасибо большое за помощь . Я успешно создал скрипт для извлечения необходимой мне информации, но у меня все еще есть некоторые проблемы с ценой. У меня есть это: preg_match('!‹noscript›\£\;(.*), ‹\/noscript›!s’, $itemPage, $matches); $text = $match['1']; // очищаем заголовок по html тегам $price = strip_tags($text); эхо $цена; $itemPage — это html-контент. - person Michael; 05.05.2010

Вы можете попробовать, является ли парсер Simple HTML DOM более отказоустойчивым.

Обратите внимание на Условия и положения сайта, который вы очищаете.

person Pekka    schedule 04.05.2010

Я не могу дать достаточно высокую рекомендацию для HTMLsql:

http://www.jonasjohn.de/lab/htmlsql.htm

Этот щенок спасал меня много раз во многих отношениях.

person Jesse Kochis    schedule 04.05.2010

после извлечения данных через curl в результате появляется много новых строк и пробелов. Итак, выполните какой-нибудь чистый html-скрипт, чтобы удалить эти новые строки и пробелы. Наконец, счастливого preg_match

person saurabh    schedule 30.08.2011