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

有没有办法用bing搜索超过20张图片?

干杯:)

有帮助吗?

解决方案

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

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

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

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

这个精心设计的计划的一个可能的障碍是 ajax 响应中返回的数据是否被加密,例如,额外的图像被捆绑在某种信封中,然后您需要发现其格式。

根据手头的实际任务,您可以尝试替代方案,例如内部自动化 油猴 (在 Firefox 上)或类似工具。

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

其他提示

您在模拟浏览器?没有了Bing引擎有程序的入口点,而不是 - Web服务左右 - 这将使您的工作更加容易。


编辑:SDK似乎是这里: http://msdn.microsoft的.com / EN-US /库/ cc980922.aspx

只是想后直接回答这个问题: 兵使用了Ajax(当然)对于无限滚动。每个“嘀”是基于一个简单的Ajax get请求,这accuires新图像。

例如,这个URL在基于查询“马克思佩恩”一“htmlraw”格式返回结果30(121-151)。 http://www.bing.com/images/async? q = MAX +佩恩&格式= htmlraw&第一= 121个

编辑: 它的工作原理与原来的网址也是如此,只需添加和第一=号码查询字符串。例: www.bing.com/images/search?q=payne&go=&form=QBLH&scope=images&filt=all&first=10

我建立我自己的批量图像采集器(用于“学习计划”为自己),我发现它是分页这样的。

仅供参考,谷歌和Bing容易,雅虎和AltaVista的(多余的,因为其结果是从雅虎)远远更多的问题 - 它们不直接连结张贴到原始图像

玩得开心! :)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top