代码之家  ›  专栏  ›  技术社区  ›  Zinx

爪哇冰图像搜索

  •  0
  • Zinx  · 技术社区  · 15 年前

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

    有没有办法用Bing搜索20多张图片?

    干杯:

    4 回复  |  直到 7 年前
        1
  •  0
  •   mjv    15 年前

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

    您可能会发送一个HTTP请求并获得初始页面(顺便说一句,在我的浏览器中,我收到了6张图片,分别是24张,而不是20张;考虑到这一点,可能我的客户机最初也只得到了20张,最后得到了4张w/ajax…),您需要通过ajax请求来完成分页槽。

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

    本质上,这可能会暴露某种形式的Ajax请求,然后您可以轻松地用Java进行仿真。通常,Ajax响应很容易解析其任何性质(XML、Jason、Gzip…)。

    这个布局良好的计划的一个可能障碍是,如果Ajax响应中返回的数据是加密的,例如,额外的图像捆绑在某种信封中,然后您需要发现其格式。

    根据手头的实际任务,您可以尝试其他选择,例如 GreaseMonkey (在火狐上)或类似的工具。

    必应API怎么样?
    请注意,上述所有方法都类似于屏幕抓取,因此对Bing应用程序中的细微更改非常敏感,并且,根据有效的使用和上下文,这可能会使项目处于合法的灰色区域…一个更好的方法可能是在MS/Bing中注册并获取适当的应用程序ID,并使用 Bing API .

        2
  •  0
  •   Thorbjørn Ravn Andersen    15 年前

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


    edit:sdk显示在此处: http://msdn.microsoft.com/en-us/library/cc980922.aspx

        3
  •  0
  •   DavidMB    15 年前

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

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

    编辑: 它也适用于原始URL,只需将&first=number添加到querystring。例子: www.bing.com/images/search?q=payne&go=&form=qblh&scope=images&filt=all&first=10

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

    仅供参考,谷歌和必应很容易,雅虎和Altavista(冗余,因为他们的结果来自雅虎)是更大的问题-他们不张贴直接链接到原始图像。

    玩得高兴!:)

        4
  •  0
  •   Ronak    7 年前

    这可以通过使用 计数 参数。例如,我试图得到 https://api.cognitive.microsoft.com/bing/v7.0/images/search?q=shoes&mkt=en-us&count=30 “调用并返回30个图像。