2015-07-01 142 views
0

基本上我试图让它抓取海报图片的网址,但由于某种原因,它不是。正则表达式在regex101中工作正常,但不在实际页面上。cUrl preg_match问题

我的代码:

<?php 

    $url="http://www.imdb.com/title/tt0121955/"; 

    $ch2 = curl_init(); 
    curl_setopt ($ch2, CURLOPT_URL, $url); 
    curl_setopt ($ch2, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt ($ch2, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"); 
    curl_setopt ($ch2, CURLOPT_TIMEOUT, 60); 
    curl_setopt ($ch2, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt ($ch2, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt ($ch2, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch2, CURLOPT_REFERER, $url); 
    $result = curl_exec ($ch2); 
    curl_close($ch2); 

    if(preg_match_all('/<td rowspan="2" id="img_primary"><div class="image"><a href="(.*)"><img alt="(.*)" title="South Park \(1997\) Poster" src="(.*)" itemprop="image" height="(.*)" width="(.*)"><\/a><\/div>/', $result, $matches) !== false) { 

    foreach($matches as $match) { 
     echo $match[0]; 
     echo $match[1]; 
     echo $match[2]; 
     echo $match[3]; 
    } 

    } 
?> 

而且我做了$匹配的var_dump它输出:

array(6) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } [4]=> array(0) { } [5]=> array(0) { } } 

所以好像它没有找到任何东西,但奇怪的是它的工作原理罚款regex101

+0

使用正确的HTML解析器而不是正则表达式。 – HamZa

回答

0

页面上的HTML与您的正则表达式不匹配。如果你不需要这些信息,不要试图用正则表达式来捕获它。尝试

preg_match_all('/title="South Park \(1997\) Poster"\s*src="([^"]+)"/m', 
    $result, 
    $matches); 

var_dump($matches); 

然后你就完成了。恕我直言,最好的方式来刮页是使用Perl。

+0

这不会工作,因为标题=“”是不同的,每次你加载页面,如果你不知道我已经有一个答案,HTML解析器。无论如何 – Kyubeh2435436