以编程方式将网页保存到静态 HTML 文件的最佳方法

2024-04-26

我做的研究越多,前景就越黯淡。

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

我尝试过几乎所有免费的转换网站、api,甚至 github 上的库。没有一个是那么令人印象深刻。我能找到的扁平化样式的最佳 python 实现是https://github.com/davecranwell/inline-styler 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 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 上看起来还不错。


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

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

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

2013 年 11 月更新

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

客户端书签 https://clippy.in/static/js/script.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将网页保存到静态 HTML 文件的最佳方法 的相关文章

随机推荐

  • 使用 Android 实现 Bouncy Castle 密码算法

    我如何使用 Bouncy Castle 提供程序来实现 Serpent 和 Twofish 等算法 因为 Sun 的提供程序根本不实现这些 我知道当多个提供商可以实现相同的算法时 您可以从排名最高的提供商 即 Sun 提供商 获得实现 如果
  • Django 无效的 HTTP_HOST 标头:“testserver”。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS

    我开始学习 Django 我正在实现 测试视图 功能 当我使用测试客户端在shell中 异常发生如下 无效的 HTTP HOST 标头 testserver 您可能需要将 u testserver 添加到 ALLOWED HOSTS 我在
  • 是否可以使用数组中存储的关键字执行 grep 操作?

    是否可以使用存储在数组中的关键字执行 grep 操作 这是可能的代码片段 我该如何纠正它 args key1 key2 key3 cat file name while read line echo line grep q w args c
  • 安卓天文台表

    如何以默认 00 00 以外的特定时间启动计时器 是否可以设置 chronometerObj setBase startTime ch setBase SystemClock elapsedRealtime anylongvalue ch
  • 将 Postgres 自动增量值重置为 0

    我有一个表 有时我会在内联编辑器中输入数据 在其中手动添加通常自动递增的 id 值 在使用脚本自动生成 id 4 然后内联添加 id 5 和 6 的情况下 每当我运行插入查询时 数据库都会尝试自动递增值 4 但是值 5 已由用户添加到数据库
  • 如何确定是否安装了 .Net 5 运行时?

    我安装了 NET 5 0 预览版 SDK 和运行时 如何检测 确定 Net 5 运行时是否是从 C 安装的 这里有一些错误 NET 5 是not NET Framework 的一个版本 它是下一个版本 NET核心 source https
  • HTML5 音频在 iOS 4 上的限制?播放列表、背景等

    我一直在 iOS 4 上评估 HTML5 音频 并试图了解它的局限性 据我所知 可以在后台播放音频 It is not可以在赛道完成后在后台触发 JavaScript 事件 屏幕关闭时可以触发 JavaScript 事件 但 Safarim
  • 仅编译 Maven 中选定的文件

    我只想编译源目录中选定的文件或目录 包括子目录 我很确定我可以使用
  • 无法访问 IIS 元数据库

    ASP NET Web 项目加载了解决方案 但我收到此错误 Web 应用程序项目配置为使用 IIS 无法访问 IIS 元数据库 您没有足够的权限访问计算机上的 IIS 网站 如何解决这个问题 这可能与注册 ASP IIS 无关 原因正是错误
  • 关于冒号的简单C++语法问题

    我刚刚看到一个代码片段 其中有一段我以前从未见过的语法 什么是bool start 1 意思是 我在头文件的类定义中找到了它 struct record char name int refcount 4 unsigned dirty 1 这
  • selenium.common.exceptions.WebDriverException:消息:未知错误:无法使用 ChromeDriver Chrome Selenium 创建 Chrome 进程错误

    我正在尝试编写基本的 python Google Chrome 与 webdriver 交互的代码 但在尝试在浏览器上启动链接时不断遇到相同的错误 这是我的代码 from selenium import webdriver import o
  • php:将变量内容下载为文件

    题主可以吗 我有一个正在执行的脚本 有一次 我在变量中有一大段文本 我可以将其作为可下载文件提供 而不实际将变量内容写入磁盘吗 如果您的意思是让用户单击链接并弹出一个对话框以将某些内容保存为文本文件
  • Graphql 创建两个查询之间的关系。错误无法在初始化之前访问

    我有这个代码 const ProductType new GraphQLObjectType name Product fields id type GraphQLID name type GraphQLString category ty
  • 批处理文件中的 URL 解码

    如何在批处理文件中 urldecode 以下字符串 我需要更改以下内容 http x3a x2f x2f www example com x2f some page x2f some x2f link html to this http w
  • 数组运算符 [] 重载 const 和非 const 版本

    我接到一个任务来实现一个模板数组类 要求之一是重载 运算符 我制作了这两个常量和非常量版本 似乎工作正常 const T operator const unsigned int index const and T operator cons
  • 散列到分组数组中

    我对 ruby 的经验不是很丰富 所以我正在努力格式化一段数据 我有这个哈希 其中包含一些具有相同值的键 例如 key gt value1 key2 gt value2 key3 gt value3 key4 gt value1 key5
  • 如何修补 Eclipse 插件?

    我想修复 eclipse 插件 WTP 的官方插件 中的错误 我在本地更改了源代码 对其进行了调试 一切都很好 现在我想将此更改传播到我的 Eclipse 安装 但我遇到了问题 似乎有不止一种方法可以实现这一目标 例如 这个网站 http
  • 从闪亮发送电子邮件

    我是一位新的 Shiny 用户 我有兴趣创建一个 Web 应用程序 访问者可以在其中填写一些问题 取决于随机 R 数据 并可以提交它们 我的问题是找到通过电子邮件向我发送该信息的方法 例如 每次他们提交数据时 我是一名大学讲师 我认为这是评
  • Mac OS X 上的 scp 问题:scp 不喜欢文件名中的空格,“\”修复不起作用

    我正在尝试使用 scp 在两台 Mac 操作系统 10 6 8 之间传输文件 但它失败了 因为我的目录 文件名中有空格 我无法更改目录 文件名 当我使用 Mac 在终端中工作时 我经常使用 符号来表示空格 然而 在这种情况下 它不起作用 我
  • 以编程方式将网页保存到静态 HTML 文件的最佳方法

    我做的研究越多 前景就越黯淡 我正在尝试使用 Python 进行平面保存或静态保存网页 这意味着将所有样式合并到内联属性 并将所有链接更改为绝对 URL 我尝试过几乎所有免费的转换网站 api 甚至 github 上的库 没有一个是那么令人