如何使用Python进行Web数据处理

时间:2007-10-09 14:25:27  来源:开发者在线  作者:

上篇文章中,我简单介绍了Python语言。如果你对这门语言还不太熟悉,你需要复习前面的内容。假定我们现在已经掌握了Python语言的基本知识,现在让我们来使用Python语言做一些更有意义的工作。

几个星期以前,我收到来自web站点发送的一封e-mail,通知我的网络空间就要到期了,在他们删除空间上的文件之前,我还有一个月的时间来备份文件。我在这一站点上只存储了一些老照片,也不是十分重要,但我还是打算将它们保存下来。

我并没有一张张地保存,而是在网站上留言说要自己写东西处理这些文件。于是我和网站就着手开发一个命令行程序,这个程序能够处理Web页面,打印页面中的图片地址。在这篇文章结束之际,我们已经完成了通过HTTP打开和读取HTML数据,定义函数,能接收多样的用户输入,并且使用正规表达式来处理正文。

函数定义

首先我们需要掌握Python语言的一项基本特征:函数。我们将实现一定功能的代码模块称之为函数,并赋予该段代码一个函数名。以后使用这段代码时,不需要再输入全部的代码,而通过函数名直接调用这段代码。Python中函数的定义很简单,如下:

def hello(name):

print "hello " + name

Def关键字后面的字符就是函数名,双括号中的字符就是函数参数——也就是函数的输入值。调用函数也十分简单,如下:

>>> hello("world")

hello world

>>> hello("everyone")

hello everyone

在所有的程序设计中,使用函数是一个好主意。通过使用函数,我们不再需要拷贝和粘贴代码,从而也减轻了程序的维护工作。同时,根据代码的功能对程序代码进行组合,使得程序更易懂和易维护。

管理用户输入

在任何时候,程序都是依赖于用户的输入工作。如果用户的输入有误,就会导致程序出错。大多数时候,如果程序出错的时候能够给出错误提示并且关闭程序,那么程序已经做得不错了。当然,程序可以进一步的完善,例如更正用户的输入,使得程序能继续运行。在下面的程序中,用户需要提供一个网址作为函数参数,所以我们将检查用户输入是否是一个合法的网址——这一程序是为Web站点开发,所以我们只接受使用HTTP协议的地址。我们将会编写函数来检查这一点,如果没有给出协议名称,就自动添加HTTP协议标准。完整的函数代码如下。接下来我们将详细分析这段代码,所以现在不理解也不要担心:

def parseAddress(input):

if input[:7] != "http://":

if input.find("://") != -1:

print "Error: Cannot retrieve URL, protocol must be HTTP"

sys.exit(1)

else:

input = "http://" + input

return input

首先,我们定义一个parseAddress函数,该函数需要一个参数,我们称之为input。下一步我们需要判断是否得到一个正确的地址,我们检查字符串的起始字符(要记得input[:7]返回输入字符串的一部分,从开始字符直到第七个字符)是否为“http://”。如果是,就没有问题。反之,程序就会出错。但是,如果只是没有指定网络协议,我们可以假定用户提供的是没有指定网络协议的http地址。我们可以使用字符串函数find来检查是否指定了协议。find函数可以对字符串和子字符串进行操作,返回值是最先匹配的字符串所在位置或者-1。-1代表没有找到匹配的字符串,例如:

>>> "hello world".find("hello")

0

>>> "hello world".find("wor")

6

>>> "hello world".find("word")

-1

让我们来测试这一函数(注意:如果你在解释器里执行这个函数,则需要导入sys文件,因为parseAddress函数中还调用了exit函数):

>>> parseAddress("http://www.builderau.com.au")

'http://www.builderau.com.au'

>>> parseAddress("www.builderau.com.au")

'http://www.builderau.com.au'

>>> parseAddress("ftp://builderau.com.au")

Error: Cannot retrieve URL, protocol must be HTTP

打开浏览HTTP站点

Python的标准库中含有许多模块,从而使得复杂的任务变得很简单。在下面的例子中,我们将要使用urllib2模块来完成打开web页面。使用urllib2模块打开和浏览web站点就如同打开文本文件一样简单:

import urllib2

website = urllib2.urlopen(address)

website_html = website.read()

上一篇:Python快速入门

文章评论

共有 位CH网友发表了评论 查看完整内容