适用于Google Ajax Crawlable规范的纯JavaScript解决方案

时间:2012-01-19 17:38:57

标签: ajax node.js web-crawler zombie.js

我有一个基于JavaScript的项目(例如node.js,backbone.js等)。我正在使用/#!/ about这样的hashbang网址并阅读了google ajax可抓取规范。我已经用僵尸进行了一些无头的UI测试,并且可以通过设置稍微的延迟并将静态内容返回到谷歌机器人来轻松设想如何做到这一点。但我真的不想从头开始实现这一点,并希望有一个适用于我的堆栈的预先存在的库。知道一个吗?

编辑:在撰写本文时,我认为这不存在。但是,在服务器和客户端上使用主干(或类似)进行渲染是一种合理的方法(即使不是直接的答案)。所以我打算将其作为答案,尽管将来可能有更好的解决方案。

4 个答案:

答案 0 :(得分:10)

为了插话,我也遇到了这个问题(我有一个非常ajax / js重型网站),我发现这可能是有趣的:

crawlme

我还没有尝试过,但听起来它会让整个过程变成一块蛋糕,如果它像宣传的那样工作!它是一个连接/表达中间件,只需在任何页面调用之前插入,显然可以完成剩下的工作。

修改

尝试过抓取之后,我取得了一些成功,但它使用的后端无头浏览器(zombie.js)失败了我的一些javascript内容,可能是因为它通过欺骗DOM来工作,因此不会很完美。 / p>

Sooo,相反,我得到了一个完整的基于webkit的无头浏览器,phantomjs和一组节点链接,如下所示:

npm install phantomjs node-phantom

然后我创建了类似于crawlme的自己的脚本,但是使用了phantomjs而不是zombie.js。这种方法似乎工作得很好,并且将完美地呈现我的每个基于ajax的页面。我写的脚本可以找到here。使用它,只需:

var googlebot = require("./path-to-file");

然后在对您的应用程序的任何其他调用之前(这是使用快速,但也应该只使用连接:

app.use(googlebot());

源是简单的减去几个正则表达式,所以有一个雄鹅:)

结果:基于AJAX的node.js / connect / express网站可以被googlebot抓取。

答案 1 :(得分:2)

在服务器和浏览器上有一个使用node.js和Backbone.js的实现 https://github.com/Morriz/backbone-everywhere

答案 2 :(得分:1)

可抓取的nodejs模块似乎符合这个目的:https://npmjs.org/package/crawlable以及可在节点https://github.com/trupin/crawlable-todos中呈现服务器端的此类SPA的示例

答案 3 :(得分:0)