当前位置: 首页 > 面试题库 >

使AJAX应用程序易于抓取?如何在Google App Engine上构建简单的Web服务以生成HTML快照?

郭胤
2023-03-14
问题内容

现实世界中的问题:

我的应用托管在Heroku上,据我所知,Heroku无法提供一种运行无头(无GUI)浏览器(例如HTMLUnit)的解决方案,以为Googlebot
生成HTML快照以索引我的AJAX内容。

我建议的解决方案:

如果您还没有的话,建议您阅读Google的
《使AJAX应用程序可抓取
的完整规范》。

想象一下我有:

  • 域上的Heroku上托管的Sinatra应用程序http://example.com
  • 该应用程序在页面顶部具有标签 TabA,TabB和TabC
  • 每个选项卡下的分别是 SubTab1,SubTab2,SubTab3
  • 如果网址是URL,http://example.com#!tab=TabA&subtab=SubTab3则onload 客户端Javascript将通过location.hash并通过AJAX加载TabA,SubTab3内容。

注意:Hash Bang(#!)是 google
spec的一部分。

我想构建一个托管在Google App Engine(GAE)上的简单“
Web服务”,该服务是:

  1. 接受URL参数,例如http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(URL参数应为URLEncoded)
  2. 运行HTMLUnit以http://example.com#!tab=TabA&subtab=SubTab3在服务器上打开并运行客户端javascript。
  3. 一切完成后(或经过45秒左右),HTMLUnit返回DOM。
  4. 返回的内容可以通过JSON / JSONP发送回去,或者将URL返回到生成并存储在google app引擎服务器上的文件(用于基于文件的“缓存”结果)…在此处欢迎提出建议。如果返回了文件的URL,则可以使用CURL来获取源代码(又称HTML快照)。

我的http://example.com应用将需要管理对http://htmlsnapshot.appspot.com… 的调用,基本上是:

  1. 捕获对Googlebots的呼叫http://example.com/?_escaped_fragment_=tab=TabA%26subtab=SubTab3googlebot搜寻器会转义某些字符,例如%26 =&)。
  2. 将请求从后端发送到http://htmlsnapshot.appspot.com?url=http://example.com#!tab=TabA&subtab=SubTab3(URL参数应为URLEncoded)
  3. 将返回的HTML快照渲染到前端。
  4. Google将内容编入索引,我们很高兴!

我对Google App Engine或Java或HTMLUnit没有任何经验。

我也许可以弄清楚……如果可以的话,将发布我的结果。

否则,我觉得这是一个 非常好的机会, 对于某人来说,写一个踢屁股博客文章概述 了新手如何逐步 建立这样的Web服务的 指南

这会将更多的人介绍给出色的(免费的)Google App
Engine。毫无疑问,这还将鼓励更多的人采用Google的可抓取AJAX内容规范…我们都可以从中受益!

随着Google规范的获得越来越多的接受,设置无头浏览器的“障碍”将使 许多
开发人员谷歌搜索答案!立即获得名誉和荣耀的答案!(编辑:至少我会唱歌给你赞美)。

@_chrisjacob 如果您想讨论解决方案,请在Twitter上打我。


问题答案:

我已在AppEngine上成功使用HTMLunit。我的GWT代码可在gwt-
platform项目中找到
,我得到的结果与Amit Manjhi 的HTMLunit-
AppEngine测试应用程序的结果相似。

使用GWTP当前的HTMLunit支持来完全按照您的描述进行操作应该相对容易,尽管您可以在更简单的应用程序中进行操作。我看到的一个问题是AppEngine请求的超时时间为30秒,因此您的页面处理HTMLunit的时间不能超过该时间。

更新
:已经有一段时间了,但是我终于解决了长期存在的有关使用GWTP使GWT应用程序可爬网的问题。文档不完全存在,但请查看问题:http : //code.google.com/p/gwt-
platform/issues/detail?id=1



 类似资料:
  • 问题内容: 我需要用python抓取网站。我使用urlib模块获取了源html代码,但是我还需要抓取由javascript函数(包含在html源代码中)生成的html代码。该功能在站点中的作用是,当您按下按钮时,它会输出一些html代码。如何使用python代码“按”此按钮?可以帮助我吗?我用firebug捕获了POST请求,但是当我尝试在url上传递它时,出现403错误。有什么建议么? 问题答案

  • 我已经看到了新版本的Android反应本机,并尝试了一些示例。它仅适用于USB调试模式和“adb反向tcp: 8081 tcp: 8081”。我如何为“生产”构建Android应用程序,包括所有依赖项,而无需反应Web服务器连接。谢谢你。

  • 我在创建一个返回“hello”字符串的简单web服务时遇到了以下错误 白标签错误页此应用程序没有/Error的显式映射,因此您将其视为回退。 我的Web服务终结点: 我的配置类: 我的依赖关系: 我的项目结构:

  • 我是詹金斯的新手,运气不太好。我正在尝试用maven构建我的spring boot应用程序。它成功地构建,直到我在调用顶级Maven目标中添加命令“clean compile package”。 构建失败。 我该如何解决这个问题?

  • 问题内容: 我想开始用Java进行Web开发。我不知道如何开始,学习什么或学习和使用的最佳Web框架是什么。帮帮我? 问题答案: 我认为,您只是Web应用程序的新手,而不是Java本身的新手。 首先,我可以为前端推荐Apache Wicket框架。他们的网站上有很多示例,邮件列表是上手的好地方,而Wicket in Action 是令人愉快的阅读。 如果要使用Java Server Pages(J

  • 在本章中,我们将了解如何在FuelPHP框架中创建一个简单的应用程序。 如前所述,您知道如何在Fuel中创建新项目。 我们可以举一个员工细节的例子。 让我们首先使用以下命令创建一个名为Employee的项目。 oil create employee 执行命令后,将使用以下file structure创建employee项目 - employee ├── CHANGELOG.md ├── co