【问题标题】:Java Bing Image SearchJava 必应图像搜索
【发布时间】:2010-12-11 12:05:52
【问题描述】:

我在 java 中有一个小型应用程序,它使用 bing 图像搜索来搜索图像。我面临的问题是,它只获得前 20 张图像。可能是因为当我们在 bing.com 上搜索时,它首先填充前 20 张图像,然后是无限滚动功能。

有没有什么方法可以用 bing 搜索超过 20 张图片?

干杯:)

【问题讨论】:

    标签: java image search bing


    【解决方案1】:

    我猜这是因为这个网站使用 ajax 来填充你所说的“无限”滚动列表。

    您可能发送了一个 http 请求并获得了初始页面(顺便说一句,在我的浏览器上,我在 x 4 下获得了 6 张图像,即 24 不是 20;考虑一下,也许我的客户最初也只获得了 20 并获得了最后 4 w/ ajax...),并且您需要通过 ajax 请求进行分页。

    乍一看,页面的 xhtml 和相关的 javascript 非常密集并且有些模糊,需要一段时间才能定位...分析此页面的替代方法是使用数据包嗅探器(例如 @ 987654321@) 并捕获向下滚动时发生的请求。

    本质上,这可能会暴露某种形式的 ajax 请求,然后您可以轻松地用 java 模拟。通常,无论其性质如何(xml、jason、gzip...),ajax 响应都很容易解析。

    如果 ajax 响应中的返回数据是加密的,例如,额外的图像被捆绑在某种信封中,那么您需要发现其格式。 /p>

    根据手头的实际任务,您可以尝试其他方法,例如 GreaseMonkey(在 Firefox 上)或类似工具中的自动化。

    Bing API 是什么?
    请注意,上述所有方法都类似于屏幕抓取,因此对 Bing 应用程序中的微小变化非常敏感,并且根据有效使用和上下文,这可能会将项目置于合法的灰色区域......更好的方法可能是向 MS/Bing 注册并获得正确的应用程序 ID 并使用Bing API

    【讨论】:

    • 您好,感谢您的回复。是的,我正在发送一个 HTTP 请求并从页面中读取。你能推荐一些用于分页的东西吗?
    • @Zinx,看看我的编辑。我建议几种方法。我现在很忙,所以我会让你“从那里拿走”。这个从 Web 上自动浏览和内容收集的问题非常普遍,并且与较新的站点结构(例如 ajax 等)相关的新问题可能开始在开发人员社区中得到很好的理解。看看 SO,您可能会发现现成的库或工具来解决这个问题。请勿将此工具/信息搜索的重点放在“必应”上,因为此关键字过于拘谨。
    • 什么是 SO。没听懂你指的是什么?
    • @akjain SO = *.com,即这个网站。
    • @mjv 是的,我在发表评论后意识到。很抱歉问了一个愚蠢的问题。
    【解决方案2】:

    您正在模拟浏览器? Bing 引擎是否没有程序的入口点——一个网络服务或其他——这会使你的任务更容易。


    编辑:SDK 似乎在这里:http://msdn.microsoft.com/en-us/library/cc980922.aspx

    【讨论】:

    • @Thor,您可能指的是Bing API(您提供的 SDK 链接指向 Bing MAP 服务),但是是的!您的想法是正确的! (虽然我对“SO rep Race”的关注度相对较低,但我有时会进入游戏,对OP的任务反应过于直接)
    【解决方案3】:

    只是想直接回答这个问题: Bing 使用 Ajax(当然)进行无限滚动。每个“tick”都基于一个简单的 ajax 获取请求,该请求获取新图像。

    例如,此网址基于查询“max payne”以“htmlraw”格式返回 30 个结果 (121-151)。 http://www.bing.com/images/async?q=max+payne&format=htmlraw&first=121

    编辑: 它也适用于原始网址,只需将 &first=NUMBER 添加到查询字符串。例子: www.bing.com/images/search?q=payne&go=&form=QBLH&scope=images&filt=all&first=10

    我正在构建自己的批量图像收集器(用于我自己的“学习项目”),我发现它是这样分页的。

    仅供参考,Google 和 Bing 很容易,Yahoo 和 Altavista(冗余,因为它们的结果来自 Yahoo)的问题要大得多 - 他们不会发布指向原始图像的直接链接。

    玩得开心! :)

    【讨论】:

      【解决方案4】:

      这可以通过使用 count 参数来完成。例如,我尝试了 GET "https://api.cognitive.microsoft.com/bing/v7.0/images/search?q=shoes&mkt=en-us&count=30" 调用,它返回 30 张图像。

      【讨论】: