Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以编程方式将网页保存到静态HTML文件的最佳方法_Python_Html_Css_Html Parsing - Fatal编程技术网

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

Python 以编程方式将网页保存到静态HTML文件的最佳方法,python,html,css,html-parsing,Python,Html,Css,Html Parsing,我做的研究越多,前景就越严峻 我正在尝试用Python进行平面保存或静态保存网页。这意味着将所有样式合并为内联属性,并将所有链接更改为绝对URL 我尝试了github上几乎所有的免费转换网站、api,甚至是库。没有一个如此令人印象深刻。对于扁平化样式,我能找到的最好的python实现是。我对Flask做了一些修改,但是生成的文件不是很好。下面是它的外观: 显然,它应该看起来更好。下面是它的外观: 在处理格式错误的html、无法识别的CSS属性、Unicode错误等方面,这似乎是一场永无休止的

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

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

我尝试了github上几乎所有的免费转换网站、api,甚至是库。没有一个如此令人印象深刻。对于扁平化样式,我能找到的最好的python实现是。我对Flask做了一些修改,但是生成的文件不是很好。下面是它的外观:

显然,它应该看起来更好。下面是它的外观:

在处理格式错误的html、无法识别的CSS属性、Unicode错误等方面,这似乎是一场永无休止的斗争。那么有人对更好的方法有什么建议吗?我知道我可以在本地浏览器中转到file->save,但当我试图大规模执行此操作时,提取一个不太可行的特定xpath


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

听起来内联样式可能会破坏你的交易,但如果不是,我建议再看看Evernote Web Clipper。桌面应用程序具有用于web剪辑的导出HTML功能。与内联样式一样,输出有点混乱,但我发现标记是保存页面的可靠表示形式

关于内联样式与外部样式,对于类似的情况,如果您在不同的站点上处理大量的页面,而这些页面的类名可能有冲突的样式规则,那么我看不到任何内联方式

您提到WebClipper使用iFrame,但我没有发现HTML输出是这样的。如果你在另一个网站上发布,你可能不得不将静态页面嵌入为iFrame(我认为这是合法的),否则这不应该成为问题


一些自动化当然会有帮助,这样您就可以直接从浏览器转到HTML输出,也许还可以将保存的图像重新定位到一个带有HTML中更新的src链接的repo。如果您最终完成了类似的工作,我将非常感谢您亲自尝试。

离开一段时间后,我安装了一个ruby库,它比我使用过的任何其他库都能更好地展平CSS。这是非常慢的web界面背后的库

谢天谢地,他们在Github上发布了源代码,这是最好的。

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

2013年11月更新 我最终编写了自己的bookmarklet,它只在客户端工作。它仅与Webkit和FireFox兼容。它通过每个节点递归并添加内联样式,然后将展开的HTML发送到clippy.in API以保存到用户的仪表板


可以使用iMacros或Selenium编写宏,从浏览器中直接执行
文件…另存为
。现在可能比在Python中弄清楚更简单。也许把整个css放在文档本身的标记之间。如果一个完整的样式表被转换成内联样式obv,那么所有的特定性都消失了,所以它肯定不起作用。感谢到目前为止的回复。我真的想在页面上创建一个Xpath片段,我希望保留样式。我能想到的唯一方法就是使用内联样式。你有没有想过用node.js代替python来尝试jsdom?您可以使用
getComputedStyle
并将其应用于HTML标记听起来很棒-期待查看它