【问题标题】:Render JavaScript to HTML in Python?在 Python 中将 JavaScript 渲染为 HTML?
【发布时间】:2012-12-29 06:49:13
【问题描述】:

什么

我的网络应用是通过 Google 的 AngularJS 动态化的。

我希望生成我的页面的静态版本。

为什么

像谷歌这样的网络爬虫执行和渲染 JavaScript;但不要像对待静态内容一样对待内容。

参考资料:

如何

不确定具体如何——这就是我要问的原因——但我想访问与浏览器的“检查元素”相同的源;而不是源代码:Ctrl+U(查看页面源代码)显示。

一旦我有一个渲染页面的脚本; “吐出” HTML+CSS;我会将那些“生成”的文件放在我的网络服务器上。然后将安排一个“cron”作业以定期重新生成文件。

随后将提供这些静态文件而不是动态文件;当 JavaScript 被禁用和/或当爬虫“访问”网站时。

【问题讨论】:

  • 这就是用 Python 编写服务器并不适合的事情——如果你一心想使用 AngularJS 之类的东西,那么在服务器上运行 Node 可能实际上是值得的。
  • @ChrisMorgan:我正在使用 Python 来管理控制器之间的接口——以 REST 方式公开我的数据——和我的模型——管理 Python 和数据库之间的连接。我还使用 Python 来管理缓存和任何其他与 Web 应用程序相关的“事物”。当然,我可以在 Node.js 中做到这一点;但我宁愿在 Python 中执行此操作(如果可能)。
  • 好吧,如果你想达到这个效果,你基本上有两个选择:(a) 做 JavaScript 所做的,在 Python 代码中,或者 (b) 实际执行页面中的 JavaScript .第一个选项需要努力维护,但可能有利于生成 API(取决于它到底是什么),第二个选项需要一些设置(例如,无头运行 webkit 并在脚本运行时获取并提供结果)并且还可能严重影响性能。

标签: javascript python html rendering static-files


【解决方案1】:

这是一种解决方案,但我非常怀疑我能否找到可以运行它的公共 PaaS 云:

import spynner

if __name__=='__main__':
    url = "http://angular.github.com/angular-phonecat/step-10/app/#/phones"
    browser = spynner.Browser()
    browser.create_webview(True)
    browser.load(url, load_timeout=60)
    print browser._get_html()
    # ^ Can pipe this to a file, POST it to my server or return it as a string
    browser.close()

包裹:Spynner (on Github)

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2019-05-10
    • 2017-01-29
    • 2011-06-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2011-03-10
    相关资源
    最近更新 更多