【发布时间】:2010-12-11 12:05:52
【问题描述】:
我在 java 中有一个小型应用程序,它使用 bing 图像搜索来搜索图像。我面临的问题是,它只获得前 20 张图像。可能是因为当我们在 bing.com 上搜索时,它首先填充前 20 张图像,然后是无限滚动功能。
有没有什么方法可以用 bing 搜索超过 20 张图片?
干杯:)
【问题讨论】:
我在 java 中有一个小型应用程序,它使用 bing 图像搜索来搜索图像。我面临的问题是,它只获得前 20 张图像。可能是因为当我们在 bing.com 上搜索时,它首先填充前 20 张图像,然后是无限滚动功能。
有没有什么方法可以用 bing 搜索超过 20 张图片?
干杯:)
【问题讨论】:
我猜这是因为这个网站使用 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。
【讨论】:
您正在模拟浏览器? Bing 引擎是否没有程序的入口点——一个网络服务或其他——这会使你的任务更容易。
编辑:SDK 似乎在这里:http://msdn.microsoft.com/en-us/library/cc980922.aspx
【讨论】:
Bing API(您提供的 SDK 链接指向 Bing MAP 服务),但是是的!您的想法是正确的! (虽然我对“SO rep Race”的关注度相对较低,但我有时会进入游戏,对OP的任务反应过于直接)
只是想直接回答这个问题: 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)的问题要大得多 - 他们不会发布指向原始图像的直接链接。
玩得开心! :)
【讨论】:
这可以通过使用 count 参数来完成。例如,我尝试了 GET "https://api.cognitive.microsoft.com/bing/v7.0/images/search?q=shoes&mkt=en-us&count=30" 调用,它返回 30 张图像。
【讨论】: