科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件如何使用Python进行Web数据处理

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章