Google 自定义搜索 API 返回 HTML 文档而不是图像
Google Custom Search API returning HTML documents instead of images
我开始为一个项目使用Google自定义搜索API,想法是搜索图像,我想使用自定义搜索,因为Google图像API 已弃用。
我已经在 CSE 控制台上启用了图像搜索
我的查询是这样的:
其中 NUMBER 是 1 到 20 之间的随机值
有时,它 returns 结果是这样的:
{u'kind': u'customsearch#result', u'title': u'Flower Wallpaper Tumblr #6790199', u'displayLink': u'7-themes.com', u'htmlTitle': u'<b>Flower</b> Wallpaper Tumblr #6790199', u'snippet': u'Flower Wallpaper Tumblr', u'htmlSnippet': u'<b>Flower</b> Wallpaper Tumblr', u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg', u'image': {u'thumbnailWidth': 150, u'byteSize': 808360, u'height': 1200, u'width': 1920, u'contextLink': u'http://7-themes.com/6790199-flower-wallpaper-tumblr.html', u'thumbnailLink': u'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSad0z_Wla0nRHAcQrjO5jLQkFjcoqnNHhejjuGmdA1AW2BqIVEpLARAk0s', u'thumbnailHeight': 94}}
突出有趣的部分:
u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg'
所以看起来 URL 是 http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg 并且 mimetype 是 image/jpeg,但是如果你转到 URL,你会发现它不是图像, 但一个 HTML 文档
当然,我可以将此捕获为异常,但我不想浪费每天的 API 请求(超出每天 100 个限制),因为 API 没有当我明确这么说时给我一张图片。
所以,问题是:这是正常行为,还是 misconfiguration/misuse 我的行为?如果是这样,我该如何解决?
感谢您的关注
经过一些阅读,我最好的猜测是某些服务器正在执行资源重定向以防止外部源直接盗链到资源。有问题的文件被宣传为图像,但从外部服务器访问它会提供一个 HTML 文档。这不是 URL 重定向,因此在下载资源之前,客户端(包括 Google 爬虫)不会检测到它。
这种资源重定向是在 Apache 服务器上使用 .htaccess
文件和 RewriteEngine
完成的,其技术类似于 here 中描述的技术,尽管该特定技术可以不能用于 HTML 文档的诱饵和切换图像。
简而言之,如果服务器对其托管的文件类型撒谎,Google 对此无能为力。您可以通过在普通网络搜索界面上执行相同的查询来确认这不是自定义搜索 API 的问题——请注意,单击图像会加载 HTML 文档而不是图像本身。
我开始为一个项目使用Google自定义搜索API,想法是搜索图像,我想使用自定义搜索,因为Google图像API 已弃用。
我已经在 CSE 控制台上启用了图像搜索
我的查询是这样的:
其中 NUMBER 是 1 到 20 之间的随机值
有时,它 returns 结果是这样的:
{u'kind': u'customsearch#result', u'title': u'Flower Wallpaper Tumblr #6790199', u'displayLink': u'7-themes.com', u'htmlTitle': u'<b>Flower</b> Wallpaper Tumblr #6790199', u'snippet': u'Flower Wallpaper Tumblr', u'htmlSnippet': u'<b>Flower</b> Wallpaper Tumblr', u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg', u'image': {u'thumbnailWidth': 150, u'byteSize': 808360, u'height': 1200, u'width': 1920, u'contextLink': u'http://7-themes.com/6790199-flower-wallpaper-tumblr.html', u'thumbnailLink': u'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSad0z_Wla0nRHAcQrjO5jLQkFjcoqnNHhejjuGmdA1AW2BqIVEpLARAk0s', u'thumbnailHeight': 94}}
突出有趣的部分:
u'link': u'http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg', u'mime': u'image/jpeg'
所以看起来 URL 是 http://7-themes.com/data_images/out/7/6790199-flower-wallpaper-tumblr.jpg 并且 mimetype 是 image/jpeg,但是如果你转到 URL,你会发现它不是图像, 但一个 HTML 文档
当然,我可以将此捕获为异常,但我不想浪费每天的 API 请求(超出每天 100 个限制),因为 API 没有当我明确这么说时给我一张图片。
所以,问题是:这是正常行为,还是 misconfiguration/misuse 我的行为?如果是这样,我该如何解决?
感谢您的关注
经过一些阅读,我最好的猜测是某些服务器正在执行资源重定向以防止外部源直接盗链到资源。有问题的文件被宣传为图像,但从外部服务器访问它会提供一个 HTML 文档。这不是 URL 重定向,因此在下载资源之前,客户端(包括 Google 爬虫)不会检测到它。
这种资源重定向是在 Apache 服务器上使用 .htaccess
文件和 RewriteEngine
完成的,其技术类似于 here 中描述的技术,尽管该特定技术可以不能用于 HTML 文档的诱饵和切换图像。
简而言之,如果服务器对其托管的文件类型撒谎,Google 对此无能为力。您可以通过在普通网络搜索界面上执行相同的查询来确认这不是自定义搜索 API 的问题——请注意,单击图像会加载 HTML 文档而不是图像本身。