深度剖析Python模块的性能问题

开发 后端
下面文章着重对Python模块进行说明研究,如果有人经常用到对网页即HTML文件的解析处理时,首先想到的就是Python应用程序。

Python应用程序被称为是一门清晰而简单的语言,因为它的作者当初在设计它的时候,考虑了初学者和一些不经常接触到这些开发语言的人们来说,这是一门非常好的操作语言。

事实上,通过Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。本文将详细介绍如何利用Python抓取和解析网页。首先,我们介绍一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块

然后,我们论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图像和Cookie等。最后,我们会给出一个规整HTML文件的格式标签的例子,通过这个例子您会发现使用python处理HTML文件的内容是非常简单的一件事情。

通过Python所带的urlparse模块,我们能够轻松地把URL分解成元件,之后,还能将这些元件重新组装成一个URL。当我们处理HTML 文档的时候,这项功能是非常方便的。函数urlparse(urlstring [, default_scheme [, allow_fragments]])的作用是将URL分解成不同的组成部分。

它从urlstring中取得URL,并返回元组 (scheme, netloc, path, parameters, query, fragment)。注意,返回的这个元组非常有用,例如可以用来确定网络协议(HTTP、FTP等等 )、服务器地址、文件路径,等等。

函数urlunparse(tuple)的作用是将URL的组件装配成一个URL,它接收元组(scheme, netloc, path, parameters, query, fragment)后,会重新组成一个具有正确格式的URL,以便供Python的其他HTML解析模块使用。函数urljoin(base, url [, allow_fragments]) 的作用是拼接URL,它以第一个参数作为其基地址,然后与第二个参数中的相对地址相结合组成一个绝对URL地址。

函数urljoin在通过为URL基地址附加新的文件名的方式来处理同一位置处的若干文件的时候格外有用。需要注意的是,如果基地址并非以字符/结尾的话。那么URL基地址最右边部分就会被这个相对路径所替换。比如,URL的基地址如果希望在该路径中保留末端目录,应确保URL基地址以字符/结尾。

上面介绍了如何解析页面的URL,现在开始讲解如何通过URL打开一个网页。实际上,Python所带的urllib和urllib2这两个模块为我们提供了从URL打开并获取数据的功能,当然,这包括HTML文档。若要通过urllib模块中的urlopen(url [,data])函数打开一个HTML文档,必须提供该文档的URL地址,包括文件名。

函数urlopen不仅可以打开位于远程web服务器上的文件,而且可以打开一个本地文件,并返回一个类似文件的对象,我们可以通过该对象从HTML文档中读出数据。一旦打开了HTML文档,我们就可以像使用常规文件一样使用read([nbytes])、readline()和readlines()函数来对文件进行读操作。

另一个常用的函数是位于从urlopen返回的类文件对象中的info()函数,这个函数可以返回URL位置有关的元数据,比如内容长度、内容类型,等等。下面通过一个较为详细的例子来对这些函数进行说明。

对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。

本文中,我们介绍了一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块。在下篇中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图像和Cookie等。

【编辑推荐】

  1. 漫谈Python 源代码编制技巧
  2. 简单易于操作的Python 工具详解
  3. 有关Python应用领域进行说明介绍
  4. PythonAndroid面向对象的编程——Python应用程序
  5. 如何使用Python模块解析配置文件 ?
责任编辑:chenqingxiang 来源: 51CTO
相关推荐

2010-02-01 13:34:59

Python 脚本

2010-02-23 10:05:52

Python历史

2010-02-04 15:38:39

Android 手机

2010-01-08 14:06:49

JSON 形式

2010-03-19 09:34:42

Cisco 2600模

2010-02-06 15:32:30

Android架构

2010-02-05 18:00:18

Android源代码

2010-02-03 16:56:24

Python包

2010-02-02 15:25:35

Python语法

2010-03-01 14:50:06

Python 工具

2010-03-01 18:33:30

2010-05-24 16:58:44

SVN安装

2010-03-03 10:38:59

2010-01-27 15:50:23

C++复杂性

2009-12-23 16:14:23

2010-03-17 14:04:05

核心交换机

2010-02-03 09:35:20

Python函数编程

2010-02-02 13:22:06

Python面向对象

2010-02-03 11:26:28

2010-02-26 10:38:29

Python语言
点赞
收藏

51CTO技术栈公众号