扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:builder.com.cn 2007年1月17日
关键字:
这里需要注意的重要一点就是,可以随意地在list数据和set数据间转换进行,但是会丢失list中条目的顺序性。下一步我想在将结果呈现给用户之前,对数据排序。有很多不同的排序算法,但是我们不愿意在排序的时候再去编写一个程序。基于这样的原因,Python也提供了很多排序函数。并不是在所有的环境下,这些函数都是最好的,当你需要快速排序的时候,你可能要自己亲自编写一个排序函数,但是在大多数的情况下,这些函数已经能够满足我们的需要。list.sort函数对list进行原地排序,并不产生新的list。
>>> x = [1,5,3,6,7,2,8,9,4]
>>> x.sort()
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9]
NB:感谢读者Jeremy提醒我sets是在Python中才引入的。如果你现在使用的是Python2.3,也可以通过字典完成同样的工作,下面的例子就是使用字典来完成上面的工作:
>>> x = ['set', 'contents', 'hello', 'world']
>>> y = dict.fromkeys(x)
>>> y
{'world': None, 'set': None, 'hello': None, 'contents': None}
>>> y['new item'] = None
>>> y
{'new item': None, 'world': None, 'set': None, 'hello': None, 'contents': None}
>>> y.keys()
['new item', 'world', 'set', 'hello', 'contents']
最终的程序代码
import sre, urllib2, sys, BaseHTTPServer
def parseAddress(input):
if input[:7] != "http://":
if input.find("://") != -1:
print "Error: Cannot retrive URL, address must be HTTP"
sys.exit(1)
else:
input = "http://" + input
return input
def retrieveWebPage(address):
try:
web_handle = urllib2.urlopen(address)
except urllib2.HTTPError, e:
error_desc = BaseHTTPServer.BaseHTTPRequestHandler.responses[e.code][0]
#print "Cannot retrieve URL: " + str(e.code) + ": " + error_desc
print "Cannot retrieve URL: HTTP Error Code", e.code
sys.exit(1)
except urllib2.URLError, e:
print "Cannot retrieve URL: " + e.reason[1]
sys.exit(1)
except:
print "Cannot retrieve URL: unknown error"
sys.exit(1)
return web_handle
if len(sys.argv) < 2:
print "Usage:"
print "%s url" % (sys.argv[0])
sys.exit(1)
match_set = set()
address = parseAddress(sys.argv[1])
website_handle = retrieveWebPage(address)
website_text = website_handle.read()
dir = website_handle.geturl().rsplit('/',1)[0]
if (dir == "http:/"):
dir = website_handle.geturl()
matches = sre.findall('<img .*src="(.*?)"', website_text)
for match in matches:
if match[:7] != "http://":
if match[0] == "/":
slash = ""
else:
slash = "/"
match_set.add(dir + slash + match)
else:
match_set.add(match)
match_set = list(match_set)
match_set.sort()
for item in match_set:
print item
做完这步之后,一个抓取Web页面图片地址的程序就完成了。这只是一个很小的例子,但是你以后开发的大部分程序都可以按照这样的模式进行。首先,检查用户输入。在这个例子中我们检查了参数的数目是否正确以及所给的网址是否正确。然后,收集处理数据。在这里我们下载了Web页面并提取其中的网址信息,并使用正规式表示。最后,组织数据,输出结果。
责任编辑:德东
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者