PHP:使用preg_match(不是Google API)提取Google中索引页面的数量

时间:2012-11-15 11:31:56

标签: php preg-match serp

我正在使用cURL来获取Google中特定搜索的结果数量。

我使用 preg_match 来提取这样的数据:

preg_match('/About (.*?) results/sim',$google_url_contents, $regs)

并且像这样:

preg_match('/Results .*? of about (.*?) from/sim', $google_url_contents, $regs)

但是,对于少于10个结果,我在数字之前没有文本字符串,所以我不知道如何解析它。

Google提供的HTML输出如下所示:

<div id="resultStats">6 results<nobr>  (0.11 seconds)&nbsp;</nobr></div>

在此示例中,如何将 6 提取为整数

注意:我暂时不想使用 Google Search API

1 个答案:

答案 0 :(得分:2)

您可以使用preg_match('/resultStats\D*([\d,]+)/', $line, $matches)

function get_number_of_results($line) {
    if (preg_match('/resultStats\D*([\d,]+)/', $line, $matches)) {
        echo "$matches[1]\n";   # for debug only
        $value = (int) str_replace(',', '', $matches[1]);
        return $value;
    }  
    return -1;  
}

$line = '<div id="resultStats">6 results<nobr>  (0.11 seconds)&nbsp;</nobr></div>';
var_dump(get_number_of_results($line));

$line = '<div id="resultStats">About 6,100,000 results<nobr>  (0.11 seconds)&nbsp;</nobr></div>';
var_dump(get_number_of_results($line));

输出:

6
int(6)
6,100,000
int(6100000)

\D表示非数字字符。 \D*是0位或更多位非字母字符。 [\d,]是数字或逗号的字符类,[\d,]+表示其中的一个或多个。