PHP - 尝试使用curl获取谷歌图像html但结果与浏览器不同

时间:2015-01-06 14:45:10

标签: php regex curl

我正在学习正则表达式,php& cUrl并想获得Google Image html (例如:https://www.google.fr/search?q=terrorist&biw=1920&bih=1008&source=lnms&tbm=isch&gws_rd=ssl#tbm=isch&q=love) 我尝试了很多不同的答案,但我不明白为什么,当我做的时候出乎意料地

<?php
function curl_get_contents($url)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($conn2, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($conn2, CURLOPT_SSL_VERIFYHOST, false);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}
$get_page = curl_get_contents("https://www.google.fr/search?q=terrorist&biw=1920&bih=1008&source=lnms&tbm=isch&gws_rd=ssl#tbm=isch&q=love");
echo $get_page;
   ?>

我的结果与浏览器完全不同。例如,所有图像链接都已死亡。 有谁知道为什么?我该怎么做才能解决它? Thanx很多!!

1 个答案:

答案 0 :(得分:0)

此请求中有2个搜索查询,如下所示

https://www.google.fr/search 问=恐怖&安培; BIW = 1920&安培;波黑= 1008&安培;源= LNMS&安培; TBM = isch&安培; gws_rd = SSL#TBM = isch&安培; 问=爱

尝试

https://www.google.fr/search?q=love&biw=1920&bih=1008&source=lnms&tbm=isch&gws_rd=ssl#tbm=isch

看起来它在浏览器中返回第一个查询然后运行第二个查询,但它不会通过curl执行第二个请求。

这对我有用:

<?php
function curl_get_contents($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);
    var_dump(curl_error($ch));
    curl_close($ch);

    return $data;
}
$get_page = curl_get_contents("https://www.google.fr/search?q=love&biw=1920&bih=1008&source=lnms&tbm=isch&gws_rd=ssl#tbm=isch");
echo $get_page;
?>

编辑:经过进一步的研究,这是一种不受支持的方式,你应该使用Google Custom Search API。您这样做会导致Google检测到滥用行为,并向您显示验证码请求,甚至可能阻止您。