如何让我的curl语句正确阅读谷歌图片猜测


How can I get my curl statement to correctly read google image guesses?

我正在创建一个小代码,用于读取谷歌在图像搜索中对图像的最佳猜测。

点击链接,你就可以看到我在说什么。http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif

如果你点击链接,你可以看到结果说:这个图像的最佳猜测:filestube标志

我想能够提取最佳猜测并将其返回

英雄是我的密码

$ch = curl_init("http://images.google.com/searchbyimage?image_url=http://static.filestube.com/files/images/logo3.gif");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);
preg_match("Best guess for this image:&nbsp;(.*)</a>", $result, $matches);
if(empty($matches)){
    echo("No guess on this image. <br />");
} else{
    echo("Best guess for this image:");
    print_r($matches);
}

我一直在返回无猜测

为什么不尝试自定义搜索API?

好吧,当我运行你的代码时,它会说:

Delimiter must not be alphanumeric or backslash

用以下内容更正preg_match行:

preg_match("~Best guess for this image:&nbsp;(.*)</a>~", $result, $matches);

您的代码目前还可以,运行时不会出现错误,但在执行时,您将再次看到:No guess on this image,因为您现在有一个主要问题。看看,如果你echo你的$result变量,你总是会得到这个:

302 Moved
The document has moved here.

而不是像直接转到你放置的链接那样显示结果的页面。

所以,你永远不会得到一个积极的结果。我认为这是对谷歌的一种保护。

尝试一些新的东西:-)

测试代码时发生的两件事:

首先,您的正则表达式是错误的。你需要对字符进行转义,比如:

preg_match("/Best guess for this image:&nbsp;(.*)<'/a>/", $result, $matches);

第二,当打印$result时,我收到一条"302:文档已移动"的消息,其中有一个指向的链接

http://images.google.com/search?tbs=sbi:AMhZZitt90SDPhLD9YMKK0zsGPwPtv7We9Nx0VHAncZh0XuZKPl_1Hqv8XGny1cs4jPSR-Byfk7P_1tBQp3Lu8p83b6yYDw_1g0v9ciHDp_1qZpBxV2lCsHVbk5MTlJYW4JdJqc683K4kk9D7k-AnmqI5fGS09xLBo0q57yYJVfgC1YPhn0u3gFW3loZIXQL30pJhulG7O5XdR-whIhu_1YQKWHGzrMEMP-rUrfoNWN0ndIv9_1vfckTr2hD0ziGMEG1Dc9kQ8XPZzdvDg0YmeyyxJhtaYK5Rgdbr9qBU4KG4GYkNPkcdPn1kq_1dRAhWNYob8aOsDK-596CLI5ys32TmsPL2riU6Hm7ov9rn_1r9ZpSDh5UmAMB72Sq2ERx6KsVMA25heuBeRlOUHTvmhgQXVL5uuqhoeqDNz0cFhHFwba3affnHn2A05apHXY2Wnf1KevEA-nYQ4TgFdBWw1XsY--kC3w03e6F_1TdxWIMLspObeLliPKOXlv7-iDg0NTcmrcKgtHknhTOMK6IsrGVhTMJnqNlorccmxyvlMCUNHslPTB9YXkusNlIs9_1H-CA1Tj79R8JWDU65ckTb9fOZ5zCkoQtouP-UkE5pLOEffXX7huJeMVF68s7vsLBGKc7-Jfm2jFoId9lnzmNjLv9NAm_1ifaVYx2rGiIhl9wcFjn3MerwS6BfjcBvHNxetxpey5vbX1gS0R4sUuV28hNdkYQbG54WmAYpqh5buBbSKHUMvFvKIUtrWIiY3PHqutuZzDJhriU6H8slX6yMhGm2c72BGG4KOZbRNg3E1oHWXHVSoLfG9zNybcW0Mf65aE4xFFq6g6dcckF5DBAYUp

有趣的是,如果我运行这个代码(卷曲链接"这里")

preg_match('/(?<=(<A HREF="))(.*)(?=('"'>here'<'/A'>))/', $result, $matches);
$ch = curl_init($matches[0]);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_exec($ch);
curl_close($ch);
print $result;

我得到的同一个页面有不同的URL,所以我猜谷歌有某种保护措施来防止背负。