使用Python获得网页中的链接

这是一个很普通的问题,网上已经很多人在讨论了,因为最近想使用Python来做一些化学方面的工作,主要是网上的资料收集,所以难免也需要使用该功能来爬一些内容。

 1 #coding=utf-8
 2 from sgmllib import SGMLParser
 3 import urllib
 4 
 5 class ListParser(SGMLParser):
 6     #def __init__(self):
 7     #    self.lister=[]
 8         
 9     def reset(self):
10         self.lister=[]
11         SGMLParser.reset(self)
12         
13     def handle_data(self,data):
14         pass
15     
16     def start_a(self,attrs):
17         for k,v in attrs:
18             if k=='href':
19                 self.lister.append(v)
20                 
21     def get_list(self):
22         return self.lister
23     
24     def get_by_ex(self,ex):
25         '''
26         根据链接的扩展名筛选链接
27         '''
28         bu_lister=[]
29         for i in self.lister:
30             try:
31                 if len(i)-i.rindex(ex)==len(ex):
32                     bu_lister.append(i)
33             except:
34                 pass
35         if len(bu_lister)==0:
36             print '"'+ex+'" is except!'
37         else:
38             return bu_lister
39             
40 def get_data(url):
41     try:
42         return urllib.urlopen(url).read()
43     except:
44         print 'error!'
45 
46 if __name__=='__main__':
47     url='./SDF/sdf.html'
48     
49     listers=ListParser()
50 
51     buffer=get_data(url)
52     #print buffer
53 
54     listers.feed(buffer)
55     list=listers.get_list()
56     print len(list)
57     
58     i=listers.get_by_ex('gz')
59     print len(i)    
60     
61     listers.close()
62     

这里的写法还是很粗燥的,如果链接不是完整的话就会有问题,获得的链接地址就是无效的。

增加了一个按照扩展名提取链接的方法,获取链接后配合wget来使用还是比较爽的啊。

 

posted on 2013-07-18 11:20  无聊之时  阅读(586)  评论(0编辑  收藏  举报