使用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来使用还是比较爽的啊。