Python通过正则表达式选取callback的方法
本文实例讲述了Python通过正则表达式选取callback的方法。分享给大家供大家参考。具体如下:
最近在瞎想怎么通过xpath去精确抓取文章的正文,跟parselets类似的想法,只不过更简单。
代码设计上采用正则表达式匹配URL,再选择callbackhandler的方式,主要参考web.py的分发器(Dispatcher)。
当然,这个实现比较老土一些,全部用function的方式回调,没有用类。
#!/bin/envpython importre,sys #Defineparserfirst. defbaidu(username): #Businesslogic return"UsingparserBaidu.andtheuser'snameis:%s."%username defqzone(uin): #Businesslogic return"UsingparserQzone,andtheuser'sQQis:%s."%uin #Fromweb.py defgroup(seq,size):#{{{ """ Returnsaniteratoroveraseriesoflistsoflengthsizefromiterable. >>>list(group([1,2,3,4],2)) [[1,2],[3,4]] >>>list(group([1,2,3,4,5],2)) [[1,2],[3,4],[5]] """ deftake(seq,n): foriinxrange(n): yieldseq.next() ifnothasattr(seq,'next'): seq=iter(seq) whileTrue: x=list(take(seq,size)) ifx: yieldx else: break #}}} defparser_init(url,mapping): forpat,whatingroup(mapping,2): result=re.compile('^'+pat+'$').match(url) ifresult: returnwhat,[xforxinresult.groups()] returnNone,None if__name__=='__main__': mapping=( 'http://(?:hi|space).baidu.com/([^/]+)(?:/.*)?','baidu', 'http://(\d+).qzone.qq.com(?:/.*)?','qzone', ) (func,args)=parser_init(sys.argv[1],mapping) iffunc: callback=func iffuncinglobals(): callback=globals()[func] ifcallable(callback): printcallback(*args) else: print'Noparserfound.';
希望本文所述对大家的Python程序设计有所帮助。