可爱的Python:我的第一个基于Web的过滤代理

本文介绍了 Txt2Html,由 David 创建的公共域工作项目,用于说明 Python 的编程技巧。Txt2Html 是“基于 Web 的过滤代理”-- 一种替用户读取基于 Web 的文档,然后将修改过的页面显示到用户浏览器的程序。为了使这成为可能,Txt2Html 以 CGI 程序的形式运行,查询外部 Web 资源的信息,并利用规则表达式。David 将为您逐步解释、说明和演示这些多种用途的子任务。

在撰写本 developerWorks 系列文章的过程中,我曾遇到过以最佳格式进行撰写的问题。文字处理程序格式都是专用的,在格式之间转换总不能尽如人意,也很麻烦(而且每种格式都会各自将文档绑定到不同的专用工具,这种情况又与开放源码的精神相违背)。HTML 还算中立 -- 也许您现在阅读的文章正是这种格式 -- 但它也添加了标记,而这些标记很容易引起误输入(或者使人束缚于 HTML 增强型编辑器)。DocBook 是一种有趣的 XML 格式,它可以转换成许多目标格式,并且它拥有技术文章(或书籍)的正确语义;但就像 HTML 一样,在撰写过程中会担心许多标记。LaTeX 特别适合复杂的印刷格式;但它也有许多标记,而这些文章并不需要复杂的印刷格式。

为了在写作时能真正省心 -- 特别是要具有平台和工具的中立性 -- 无格式 ASCII 正是最好的选择。但是,因特网(特别是 Usenet)建议在完全无格式文本的基础上,开发一种“智能 ASCII”文档的非正式标准(请参阅 参考资料 )。“智能 ASCII”只添加了一点额外的语义内容和上下文,而且它们在文本显示中看起来是那么“自然”。电子邮件、新闻组邮件、FAQ、项目自述文件 (README) 和其它电子文档通常包括一些印刷/语义元素,如强调字前后的星号、标题下的下划线、描述文本关系的竖直和水平空格、有选择性的全大写和其它一些信息。Project Gutenberg(请参阅 参考资料 )是一种惊人的成果,它将许多想法加入其自身格式构思中,并认为“智能 ASCII”是长时间保存和分发好书的最佳选择。即使这些文章不会像文学名著那样经久不衰,仍决定将它们写成“智能 ASCII”格式,并用方便的 Python 脚本将它们自动转换成其它格式。

介绍 Txt2Html

Txt2Html 最初是一个简单的文件转换器,从其名称上就可以看出。但因特网建议在工具上添加几个明显的增强功能。因为有许多读者想以“HTML 化”格式查看的文档都在 http: 或 ftp: 链接的后面,所以工具应该真正直接处理这样的远程文档(而不需要下载/转换/查看循环周期)。因为转换的目标最终是 HTML,通常我们要做的就是在 Web 浏览器中查看转换后的目标文档。

将这些放到一起后,Txt2Html 就成了“基于 Web 的过滤代理”。这个词很奇特,也许恰好能“完全表达其含义”。它们体现了以下想法:程序代表您阅读 Web 页面(或其它资源),以某种方式处理内容,然后以某种比原始页面 更好 的形式(至少能满足某些特殊目的)向您显示该页面。这种工具的一个很好例子就是 Babelfish 翻译服务(请参阅 参考资料 )。在通过 Babelfish 运行了 URL 之后,您看到的 Web 页面与原始页面非常相似,但它显示了您能够读懂的文字,而不是您不理解的语言。在某种程度上,所有显示搜索结果页面摘要的搜索引擎所做的都是相同的事情。但那些搜索引擎(按设计)在目标页面的格式以及外观方面有更多的自由度,同时会去掉许多内容。当然,Txt2Html 并不如 Babelfish 那样功能强大;但概念上,它们很大程度上完成相同的事情。请参阅 参考资料以获取更多的例子,其中一些还很幽默。

Txt2Html 最大的优点是使用许多编程技巧,而这些技巧对于不同面向 Web 使用 Python 是共通的。本文将介绍那些技巧,并会说明编码技巧和一些 Python 模块的作用域。请注意:Txt2Html 中的实际模块叫做 dmTxt2Html,以避免与其他人编写的模块名称发生冲突。

使用 cgi 模块

Python 标准发行版中的 cgi 模块对于任何用 Python 开发“公共网关接口”应用程序的人来说都是意外惊喜。可以不使用它来创建 CGI,但您不会这样做。

最通常的情况下,您会通过 HTML 表单与 CGI 应用程序进行交互。要填写调用 CGI 的表单以执行使用规范的操作。例如,Txt2Html 文档使用这个例子来调用 HTML 表单(Txt2Html 自身生成的表单比较复杂,并且可能会改变,但示例将会很好地工作,甚至是在您自己的 Web 页面中):

调用 'Txt2Html' 的 HTML 表单

<form method="get" action="http://gnosis.cx/cgi/txt2html.cgi">
   URL: <input type="text" name="source" size=40>
   <input type="submit" name="go" value="Display!">
  </form>

时间: 2024-11-08 17:30:50

可爱的Python:我的第一个基于Web的过滤代理的相关文章

利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

[编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便,软件开发简单,而且据说运行性能优于其它脚本语言.(虽然最新版本的 PHP.PHP 7 可能会与它展开激烈竞争.) 所有人都希望自己的网站和应用程序运行得更快一些.但是,每个网站在流量增长或骤然出现流量峰值时都很容易发生性能问题.甚至宕机(这一般会在服务器最繁忙的时候发生).此外在运行期间,无论是流

可爱的Python:Curses编程

某一类 Python应用程序最好使用交互式用户界面,这样可以消除图形环境的系统开销或复杂性.交互式文本模式程序(在Linux/UNIX 中),例如封装在 Python 的标准 curses模块中的 ncurses 库,正是您所需要的.本文中,DavidMertz 讨论了在 Python 中 curses 的用法.他使用从前端到 Txt2Html程序的样本源代码阐述了 curses 环境. curses 库 ( ncurses ) 提供了控制字符屏幕的独立于终端的方法.curses 是大多数类似于

在Python下使用Txt2Html实现网页过滤代理的教程_python

在撰写本 developerWorks 系列文章的过程中,我曾遇到过以最佳格式进行撰写的问题.文字处理程序格式都是专用的,在格式之间转换总不能尽如人意,也很麻烦(而且每种格式都会各自将文档绑定到不同的专用工具,这种情况又与开放源码的精神相违背).HTML 还算中立 -- 也许您现在阅读的文章正是这种格式 -- 但它也添加了标记,而这些标记很容易引起误输入(或者使人束缚于 HTML 增强型编辑器).DocBook 是一种有趣的 XML 格式,它可以转换成许多目标格式,并且它拥有技术文章(或书籍)的

可爱的Python: 用基于生成器的状态机和协同程序增加效率

Python 2.2 中引进的简单生成器可用于简化状态机以及模仿协同程序.David 在"可爱的 Python"专栏较早前的一个部分中介绍了一个 状态机处理的抽象模式.从那时起,简单生成器的引进就为描述机器提供了一些更自然的范例.协同程序是一种"外来"流机制,广泛使用的语言几乎都不支持这种机制(甚至连非 Stackless Python 都不支持它).然而,Python 的新生成器 几乎完全支持协同程序,几乎不用模仿任何额外的步骤.在本文中,David 通过说明性代

可爱的Python:Decorator简化元编程

Python 使元编程成为可能,不过每个版本的 Python 都有一些细微的区别(并且不是完全兼容),这使我们实现元编程的道路变得更加崎岖.一类函数对象的使用由来已久,同样还有一些技术用于探索和实现魔术般的属性.在版本 2.2 中,Python 增加了一种很有帮助的定制元类机制,但是其代价就是令用户绞尽脑汁.最近,在 2.4 版本中,Python 增加了 "decorator" ,这是适于执行大部分元编程的最新方式 -- 也是到目前为止对用户最友好的方式. 少劳多得 Decorator

可爱的Python: 使用Spark模块解析

Spark 是一种用 Python 编写的强大的.通用的解析器/编译器框架.在某些方面,Spark 所提供的比 SimpleParse 或其它 Python 解析器提供的都要多.然而,因为它完全是用 Python 编写的,所以速度也会比较慢.David 在本文中讨论了 Spark 模块,给出了一些代码样本,解释了它的用途,并对其应用领域提供了一些建议. 继"可爱的 Python"系列中专门讲述 SimpleParse 的 前一篇文章之后,我将在本文中继续介绍一些解析的基本概念,并对 S

可爱的Python:将XML和Python结合起来

开始在 Python 中使用 XML 的一个主要要素是排列出所有可用模块的可比性能力.在他的新 Python 专栏"可爱的 Python"的第一部分中,David Mertz 简要描述了最流行和实用的关于 XML 的 Python 模块,并指出可以下载的单独模块以及可供阅读的参考资料.本文有助于确定哪些模块最适合特定任务. 在许多情况下,Python 是使用 XML 文档的理想语言.像 Perl.REBOL.REXX 和 TCL 一样,它是一种灵活的脚本语言,并且有强大的文本操作能力.

可爱的Python: 重温Python的XML工具

David Mertz 创作的 可爱的 Python的第一.第二部分概述了在 Python 中使用XML.然而,在那些最初的文章出现后,Python 中的 XML工具有了很大的发展.不幸的是,这些改进中的大多数并不向后兼容.在这个特别部分中,重温了作者先前对XML 工具的讨论,并提供最新的代码示例. 在许多情况下,Python 是使用 XML 文档的理想语言.像 Perl.REBOL.REXX 和 TCL 一样,它是一种灵活的脚本语言,并且有强大的文本操作能力.而且,除了对多数类型的文本文件(或

可爱的Python: Numerical Python

Numerical Python (通常称为 NumPy) 是一个广为应用的 Python 扩展库,用于快速处理任意维数的固定类型数组.由于底层代码是充分优化的 C 语言代码,因而对数组的主要操作在 NumPy 调用中执行时,速度不再受到 Python 解释器的限制.因为 NumPy 已经取得了这样的成功,所以 NumPy 的开发者将用一个叫做 Numarray 的新模块来取代 NumPy,新模块基本上 (但并不是完全) 与 NumPy 兼容.在本文中,David 介绍了 NumPy 的一般功能