我在 java 中有一个小应用程序,它使用 bing 图像搜索来搜索图像。我面临的问题是,它只获得前 20 张图像。可能是因为当我们在 bing.com 上搜索时,它首先填充前 20 张图像,然后是无限滚动功能。
有没有办法使用 bing 搜索 20 多张图片?
干杯:)
我猜这是因为该站点使用 ajax 来填充您所称的“无限”滚动列表。
您可能会发送一个 http 请求并获取初始页面(顺便说一句,在我的浏览器上,我在 x 4 下得到了 6 个图像,即 24 个而不是 20 个;考虑一下,也许我的客户一开始也只得到 20 个,最后得到了 4 个 w/ajax ...),并且您需要通过 ajax 请求进行分页。
乍一看,页面的 xhtml 和相关的 javascript 非常密集并且有些模糊,需要一段时间才能定位...分析此页面的替代方法是使用数据包嗅探器(例如wireshark)并捕获向下滚动时发生的请求。
从本质上讲,这可能会暴露某种形式的 ajax 请求,然后您可以轻松地用 java.util 模拟。通常,无论其性质如何(xml、jason、gzip...),ajax 响应都很容易解析。
如果 ajax 响应中的返回数据是加密的,例如,如果将额外的图像捆绑在某种信封中,那么您需要发现这种信封的格式。
根据手头的实际任务,您可以尝试替代方案,例如GreaseMonkey(在 Firefox 上)或类似工具中的自动化。
Bing API 呢?
请注意,上述所有方法都类似于屏幕抓取,因此对 Bing 应用程序中的微小变化非常敏感,并且根据有效使用和上下文,这可能会将项目置于合法的灰色区域......更好的方法可能是向 MS/Bing 注册并获得正确的应用程序 ID 并使用Bing API。
你在模拟浏览器?Bing 引擎是否没有程序的入口点 - 一个 Web 服务或其他 - 这将使您的任务更容易。
编辑:SDK似乎在这里:http: //msdn.microsoft.com/en-us/library/cc980922.aspx
只是想直接回答这个问题:必应使用 Ajax(当然)进行无限滚动。每个“tick”都基于一个简单的 ajax 获取请求,该请求获取新图像。
例如,此 URL 基于查询“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
我正在构建自己的批量图像收集器(为自己的“学习项目”),我发现它是这样分页的。
FYI, Google and Bing are easy, Yahoo and Altavista (redundant, since their results are from Yahoo) are far more problematic - they don't post the directlink to the original image.
Have fun! :)
This can be done by using count parameter. For example, I tried GET "https://api.cognitive.microsoft.com/bing/v7.0/images/search?q=shoes&mkt=en-us&count=30" call and it returns 30 images.