简单的html dom解析器无法解析所有页面

时间:2012-08-24 08:05:43

标签: php simple-html-dom

我需要从that site

的中间栏获取信息

(我需要准确的电话号码)

我正在使用SimpleHTML dom解析器,并尝试了一些curl方法,但它总是给我一个没有该中心列的html源代码!

我明白使用此代码:

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

我需要说我今天能否这样做,否则我将失去此命令。 抱歉我的英文不好,谢谢。

1 个答案:

答案 0 :(得分:0)

注意charset转换的请求标头和iconv。

如果你没有在utf-8中转换来自windows-1251的字符串,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库,请尝试使用file_get_contents($ url)替换curl块。

要在谷歌的操作系统搜索上安装curl,在Ubuntu上使用 sudo apt-get install curl libcurl3 php5-curl 并重新启动apache。