Java 使AJAX应用程序可爬行?如何在Google App Engine上构建一个简单的web服务来生成HTML快照?
现实世界问题: 我将我的应用程序托管在上,据我所知,他们无法提供运行无头(无GUI)浏览器的解决方案,例如为Googlebot生成索引以索引我的AJAX内容 我建议的解决方案: 如果你还没有,我建议你阅读谷歌的 想象一下我有:Java 使AJAX应用程序可爬行?如何在Google App Engine上构建一个简单的web服务来生成HTML快照?,java,ajax,google-app-engine,seo,htmlunit,Java,Ajax,Google App Engine,Seo,Htmlunit,现实世界问题: 我将我的应用程序托管在上,据我所知,他们无法提供运行无头(无GUI)浏览器的解决方案,例如为Googlebot生成索引以索引我的AJAX内容 我建议的解决方案: 如果你还没有,我建议你阅读谷歌的 想象一下我有: 域Heroku上托管的应用程序http://example.com 该应用程序在页面顶部有选项卡TabA、TabB和TabC 每个选项卡下都有子选项卡1、子选项卡2、子选项卡3 如果url为http://example.com#!tab=TabA&subtab=SubT
- 域
Heroku上托管的应用程序http://example.com
- 该应用程序在页面顶部有选项卡TabA、TabB和TabC
- 每个选项卡下都有子选项卡1、子选项卡2、子选项卡3
- 如果url为
然后客户端Javascript获取http://example.com#!tab=TabA&subtab=SubTab3
并通过AJAX加载TabA,SubTab3内容location.hash
http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(url参数应为url编码)http://example.com#!tab=TabA&subtab=SubTab3
并在服务器上运行客户端javascripthttp://example.com
app需要管理呼叫http://htmlsnapshot.appspot.com
。。。基本上:
http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3
(谷歌机器人爬虫程序会转义某些字符,例如%26=&)http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3
(url参数应为url编码)如果您想讨论解决方案,请在twitter上与我联系。我已在AppEngine上成功使用了HTMLunit。我的GWT代码可以在中找到,我得到的结果与Amit Manjhi的类似 使用GWTP当前的HTMLunit支持来完成您所描述的事情应该相对容易,尽管您可以在一个更简单的应用程序中完成。我看到的一个问题是AppEngine请求有30秒的超时时间,所以您不能有一个页面处理的时间超过30秒 更新: 已经有一段时间了,但我终于解决了一个长期存在的问题,即使用GWTP使GWT应用程序可爬行。文档并不完整,但请查看问题:
有趣的阅读:“让HtmlUnit在谷歌应用程序引擎(GAE)上运行”参见HtmlUnit 2.8发行说明。HtmlUnit 2.8发行说明:-你是对的,他们说GAE支持是功能性的(或至少是“固定的”)。我仍然在使用HtmlUnit访问我自己的应用程序时遇到问题,这使得应用程序很难向爬虫提供服务。我的问题的细节很微妙,但我在这里描述它们()。我已经有一段时间没有测试过了,所以问题可能已经解决了。在Amit Manjhi的测试应用程序上,它似乎可以在相同的URL上正常工作。也许这已经解决了问题,或者这取决于多种因素。可能是。有一段时间我一直在想,免费AppEngine帐户是否存在某些限制,不会连续生成两个servlet。谢谢Philippe和Matt。我将调查GWTP,看看能得出什么结果。如果你们中的任何一位有兴趣与我合作,我认为作为Web服务的无头浏览器是一个有趣的项目(对于GAE和GWTP应该不是很难)。今天,我设计了自己的解决方案,用于构建可爬行、可访问、深度链接的AJAX web应用程序。当客户端没有javascript时,利用无头浏览器生成HTML快照。。“无头AJAX”我想我会叫它;)。稍后将提供更多信息。Chris,GWTP上有一个未决问题,关于使基于应用程序引擎的GWTP应用程序可爬行的模块。我上面描述的bug阻止了它,但我的最新想法是,按照这里的建议,通过提供一种简单的方法来构建自己的Web服务,从而解决棘手的问题。也许你想在这方面有所贡献?(议题和讨论在:)