【问题标题】:cUrl preg_match issuescUrl preg_match 问题
【发布时间】:2015-09-18 00:38:06
【问题描述】:

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

我的代码:

<?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];
    }

    }
?>

我还在 $matches 上做了 var_dump,它输出:

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

所以它似乎没有找到任何东西,但奇怪的是它在 regex101 上运行良好

【问题讨论】:

  • 使用适当的 HTML 解析器而不是正则表达式。

标签: php regex curl


【解决方案1】:

页面上的 HTML 与您的正则表达式不匹配。如果您不需要该信息,请不要尝试使用正则表达式捕获它。试试

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

var_dump($matches);

你就完成了。恕我直言,抓取页面的最佳方法是使用 perl。

【讨论】:

  • 这不起作用,因为每次加载页面时 title="" 都不一样,如果你不知道我已经有了答案,HTML Parser。还是谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多