<?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中的所有东西)。
帮助将不胜感激!
答案 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);|#)/", '&', $content);
$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DomXPath($doc);
$item = $xpath->query('//div[@id="searchform"]');