9

我做的研究越多,前景就越严峻。

我正在尝试使用 Python 进行平面保存或静态保存网页。这意味着将所有样式合并为内联属性,并将所有链接更改为绝对 URL。

我已经尝试了几乎所有免费的转换网站、api,甚至 github 上的库。没有一个是那么令人印象深刻。我能找到的扁平化样式的最佳 python 实现是https://github.com/davecranwell/inline-styler。我为 Flask 稍作调整,但生成的文件不是那么好。这是它的外观:

在此处输入图像描述

显然,它应该看起来更好。它应该是这样的:

https://dzwonsemrish7.cloudfront.net/items/3U302I3Y1H0J1h1Z0t1V/Screen%20Shot%202012-12-19%20at%205.51.44%20PM.png?v=2d0e3d26

处理格式错误的 html、无法识别的 CSS 属性、Unicode 错误等似乎是一场永无止境的斗争。那么有没有人建议更好的方法来做到这一点?我知道我可以在本地浏览器中转到文件-> 保存,但是当我尝试批量执行此操作时,并提取一个不太可行的特定 xpath。

看起来 Evernote 的网络剪辑器使用 iFrame,但这似乎比我想象的要复杂。但至少剪报在 Evernote 上看起来不错。

4

2 回答 2

3

离开一段时间后,我设法安装了一个 ruby​​ 库,它比我用过的任何其他东西都更好地扁平化了 CSS。这是非常慢的网络界面背后的库http://premailer.dialect.ca/

谢天谢地,他们在 Github 上发布了源代码,这是最好的。 https://github.com/alexdunae/premailer

它扁平化样式,创建绝对 URL,使用 URL 或字符串,甚至可以创建纯文本电子邮件模板。这个图书馆给我留下了深刻的印象。

2013 年 11 月更新

我最终编写了自己的书签,它纯粹在客户端工作。它仅与 Webkit 和 FireFox 兼容。它遍历每个节点并添加内联样式,然后将扁平化的 HTML 发送到 clippy.in API 以保存到用户的仪表板。

客户端书签

于 2012-12-20T03:45:59.300 回答
2

听起来内联样式可能会让您大吃一惊,但如果不是,我建议您再看看 Evernote Web Clipper。桌面应用程序具有 Web 剪辑的导出 HTML 功能。正如您对内联样式所期望的那样,输出有点混乱,但我发现标记是已保存页面的可靠表示。

关于内联与外部样式,对于像这样的事情,如果您正在从不同站点处理大量页面,其中类名会有冲突的样式规则,我看不到任何内联方式。

您提到 Web Clipper 使用 iFrame,但我没有发现 HTML 输出是这种情况。如果您要在另一个网站上重新发布(我认为是合法的),您可能必须将静态页面作为 iFrame 嵌入,否则这应该不是问题。

一些自动化肯定会有所帮助,因此您可以直接从浏览器转到 HTML 输出,也许还可以将保存的图像重新定位到单个 repo,并在 HTML 中更新 src 链接。如果您最终从事这样的工作,我将不胜感激自己尝试一下。

于 2012-12-20T01:04:35.813 回答