在页面中的所有链接(如蜘蛛)上使用CURL获取特定内容

时间:2014-03-24 15:39:09

标签: php curl

我正在编写一个从URL开始的小应用程序,并查看该特定页面中的所有链接。 接下来,它将继续所有链接并刮除内容,但仅显示特定内容(具有10个或更多字符的数字)。 这是我的代码,但它检索空白页,出了什么问题?

//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

1 个答案:

答案 0 :(得分:0)

问题#1 :您的html可以包含以下网址:从/home/test.php选择没有基础http://www.example.com/的链接。因此,在请求卷曲之前,请在屏幕或浏览器上打印并检查它是什么。

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

问题#2 2 CURLOPT_CONNECTTIMEOUT秒对您来说可能更少。所以尝试增加这个值。

curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 10);

如果问题仍然存在,请向我们展示示例页面链接。以及一个示例内部链接,您将获得空白响应。