使用CURL从外部网页中选择特定div

时间:2010-04-01 09:39:59

标签: php regex html curl

大家可以帮助我如何从网页内容中选择特定的div。

假设我想从网页id="wrapper_content"获取http://www.test.com/page3.php的div。

我当前的代码看起来像这样:(不工作)

//REG EXP.
$s_searchFor = '@^/.dont know what to put here..@ui';    

//CURL
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://www.test.com/page3.php');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if(!preg_match($s_searchFor, $ch))
{
  $file_contents = curl_exec($ch);
}
curl_close($ch);

// display file
echo $file_contents;

所以我想知道如何使用reg表达式来查找特定div以及如何取消设置网页的其余部分,以便$file_content仅包含div。< / p>

3 个答案:

答案 0 :(得分:14)

HTML isn't regular,所以你不应该使用正则表达式。相反,我会推荐HTML解析器,例如Simple HTML DOMDOM

如果您打算使用Simple HTML DOM,您可以执行以下操作:

$html = str_get_html($file_contents);
$elem = $html->find('div[id=wrapper_content]', 0);

即使你使用正则表达式,你的代码仍然无法正常工作。在使用正则表达式之前,您需要获取页面的内容。

//wrong
if(!preg_match($s_searchFor, $ch)){
    $file_contents = curl_exec($ch);
}

//right
$file_contents = curl_exec($ch); //get the page contents
preg_match($s_searchFor, $file_contents, $matches); //match the element
$file_contents = $matches[0]; //set the file_contents var to the matched elements

答案 1 :(得分:4)

include('simple_html_dom.php');
$html = str_get_html($file_contents);
$elem = $html->find('div[id=wrapper_content]', 0);

下载simple_html_dom.php

答案 2 :(得分:0)

检查我们的hpricot,它可以让你优雅地选择部分

首先你会使用curl来获取文档,然后使用hpricot来获取你需要的部分