Простой парсер html dom не может разобрать всю страницу

Мне нужно получить информацию из центральной колонки этого сайта

(мне нужны именно номера телефонов)

Я использую синтаксический анализатор SimpleHTML dom и пробовал какой-то метод curl, но он всегда дает мне исходный код html без этого центрального столбца!

Я понял, что с помощью этого кода:

 $html = file_get_html('http://vashmagazin.ua/cat/catalog/?rub=100&subrub=1');
 $str = $html->Save();
 echo $str;

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


person Trimod    schedule 24.08.2012    source источник


Ответы (1)


Обратите внимание на заголовки запросов и iconv для преобразования кодировки.

Если вы не конвертируете строку из windows-1251 в utf-8, preg_match не сработает.

После преобразования я использовал простое регулярное выражение для извлечения телефонных номеров со всей страницы.

<?php

    $url = 'http://vashmagazin.ua/cat/catalog/?rub=100&subrub=1';

    $ch = curl_init();
    $request_headers = array
        (
            "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Charset" => "windows-1251,utf-8;q=0.7,*;q=0.3",
        );

    $header = array();
    foreach ($request_headers as $key => $value)
        $header[] = "{$key}: {$value}";

    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7');
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $html = curl_exec($ch);
    curl_close($ch);

    $html = iconv("windows-1251", "UTF-8", $html);

    $matches = array();
    $pattern = '/\([0-9]{3}\)[0-9]{3,}\-[0-9]+/us';

    if (preg_match_all($pattern, $html, $matches))
    {
        var_dump($matches);
    }

?>

Приведенный выше исходный код полностью протестирован и полностью работает.

Если вы не можете установить библиотеку curl, попробуйте заменить блок curl на file_get_contents($url).

Чтобы установить curl в вашей операционной системе, выполните поиск в Google, в Ubuntu используйте sudo apt-get install curl libcurl3 php5-curl и перезапустите apache.

person Francesco Casula    schedule 24.08.2012
comment
Неустранимая ошибка: вызов неопределенной функции curl_init() в F:\xampp\htdocs\mag\index.php в строке 5 --- может быть, мне нужна какая-то библиотека для включения? (кроме простого html dom, который я уже включил) - person Trimod; 24.08.2012
comment
Вы должны установить библиотеку curl, в Ubuntu вы можете установить ее с помощью этой команды: sudo apt-get install curl libcurl3 php5-curl (в противном случае вы можете попробовать использовать напрямую file_get_contents($url)... Код протестирован и работает на 100% - person Francesco Casula; 25.08.2012