2014-03-24 84 views
0

我正在编写一个小应用,它从一个URL开始,然后查看该特定页面中的所有链接。 接下来,它将继续进行所有链接并抓取内容,但仅显示特定内容(具有10个或更多字符的数字)。 这是我的代码,但它检索空白页,有什么不对?使用CURL在页面中的所有链接(如蜘蛛)上获取特定内容

//I 

$url = 'http://xxx.xxx'; 
$str = file_get_contents($url); 
$original_file = file_get_contents($url); 
$stripped_file = strip_tags($original_file, "<a>"); 
preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $stripped_file, $matches); 
$links = $matches[1]; 
//print_r($links); 

//F 

//F 
$count = count($links); 
for($i=0;$i<=$count;$i++) 
{ 
    //I 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL,$links[$i]); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1'); 
    $query = curl_exec($curl_handle); 
    curl_close($curl_handle); 
    preg_match_all('/\b3\d+/', $query, $matches2); 
    $numbers = $matches2[0]; 
    $count = 0; 
    foreach($numbers as $value) { 
    if(strlen((string)$value) >= 10) echo '<br><br>[' . $count++ . "]" . $value; 
    } 
    //F 
} 
//F 
+0

我不会为每个请求初始化一个新的curl实例。使用'Keep-Alive'的好处并重新使用curl会话。 – DanFromGermany

+0

我注意到你没有执行任何调试。 [启用错误报告](http://blog.flowl.info/2013/enable-display-php-errors/)并重试。 – DanFromGermany

回答

0

问题#1:你的HTML可以像它正在复苏的链接作为/home/test.php其中无底座http://www.example.com/以下网址。因此,在请求curl之前,请在屏幕或浏览器上打印并检查它是什么。

<a href="/home/test.php">link</a> 

问题#22秒为CURLOPT_CONNECTTIMEOUT可以证明不太适合你。所以请尝试增加此值。

curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 10); 

如果问题仍然存在,请向我们提供样本页面链接。还有一个示例内部链接,您可以获得空白回复。

相关问题