为什么在获取内容时结果为空数组?

时间:2015-08-20 08:50:04

标签: php regex

<?php
    $page = file_get_contents("https://www.google.com");

    preg_match('#<div id="searchform" class="jhp big">(.*?)</div>#Uis', $page, $matches);

    print_r($matches);
    ?>

我写的以下代码必须抓住另一个网页的特定部分(在本例中为google)。不幸的是它不起作用,我不确定为什么(因为正则表达式本身就是抓住div中的所有东西)。

帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

根据您粘贴的页面的来源,不存在具有该结构的行。这是一个的原因,不建议使用标准表达式解析HTML。

使用getElementById()似乎可以实现您的目标:

<?php
$page = file_get_contents("https://www.google.com");

$doc = new DOMDocument();
$doc->loadHTML($page);
$result = $doc->getElementById('searchform');

print_r($result);
?>

编辑:

您可以使用以下代码:

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://google.com');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);


$page = curl_exec($curl);
curl_close($curl);

$doc = new DOMDocument();
$doc->loadHTML($page);
echo($page);
$result = $doc->getElementById('searchform');
print_r($result);
?>

您可能需要参考this问题,因为您可能需要更改某些设置。

答案 1 :(得分:1)

DomxPath对你来说是更好的选择,这是一个例子。

<?php

$content = file_get_contents('https://www.google.com');

//gets rid of a few things that domdocument hates
$content = preg_replace("/&(?!(?:apos|quot|[gl]t|amp);|#)/", '&amp;', $content);

$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DomXPath($doc);


$item = $xpath->query('//div[@id="searchform"]');