我有一个用java的小应用程序,它使用冰图像搜索来搜索图像。我面临的问题是,它只能得到前20张图像。可能是因为当我们在bing.com上搜索时,它首先填充前20个图像,然后它是一个无限滚动的功能。
有没有办法用必应搜索超过20张图片?
干杯:)
发布于 2009-10-30 12:41:17
我猜这是因为这个站点使用ajax填充您所说的“无限”滚动列表。
您可能发送了一个http请求并获得了初始页面(顺便说一句,在我的浏览器上,我得到了6张x 4的图像,即24张而不是20张;想一想,也许我的客户端一开始也只有20张,最后4张是用ajax...),您需要通过ajax请求的方式进行分页。
乍一看,页面的xhtml和相关的javascript非常密集,有些混乱,需要一段时间才能适应……分析此页面的另一种方法是使用数据包嗅探器(如),并捕获向下滚动时发生的请求。
从本质上讲,这可能会暴露某种形式的ajax请求,然后您可以很容易地用java来模拟它。通常,ajax响应很容易解析,不管它的性质是什么(xml、jason、gzip……)。
这个布局良好的计划的一个可能的障碍是,如果ajax响应中返回的数据是加密的,例如,额外的图像被捆绑在某种类型的信封中,然后您需要发现其格式。
根据手头的实际任务,您可以尝试其他选择,例如在 (在Firefox上)或类似工具中实现自动化。
什么是必应应用程序接口?
请注意,上面的所有方法都类似于屏幕抓取,因此对Bing应用程序中的微小变化都非常敏感,并且,根据有效的使用和上下文,这可能会将项目置于法律灰色区域……一种更好的方法可能是向MS/Bing注册并获得适当的应用程序ID,并使用Bing API。
发布于 2009-10-30 14:02:07
你在模拟一个浏览器?Bing引擎不是有一个程序的入口点吗--一个web服务之类的--这会让你的任务变得更容易。
编辑: SDK显示在这里:http://msdn.microsoft.com/en-us/library/cc980922.aspx
发布于 2010-04-07 02:20:47
我只想直接回答这个问题: Bing使用Ajax (当然)来实现无限滚动。每个"tick“都基于一个简单的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即可。示例: www.bing.com/images/search?q=payne&go=&form=QBLH&scope=images&filt=all&first=10
我正在构建自己的批量图像收集器(为了自己的一个“学习项目”),我发现它是这样分页的。
仅供参考,谷歌和必应很简单,雅虎和Altavista (冗余的,因为他们的结果来自雅虎)是更多的问题-他们不会发布到原始图像的直接链接。
玩得开心!:)
https://stackoverflow.com/questions/1647989
复制相似问题