首页 > 编程 > Python > 正文

Python通过正则表达式选取callback的方法

2020-01-04 18:02:08
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Python通过正则表达式选取callback的方法,涉及Python正则表达式及回调函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Python通过正则表达式选取callback的方法。分享给大家供大家参考。具体如下:

最近在瞎想怎么通过xpath去精确抓取文章的正文,跟parselets类似的想法,只不过更简单。

代码设计上采用正则表达式匹配URL,再选择callback handler的方式,主要参考web.py的分发器(Dispatcher)。

当然,这个实现比较老土一些,全部用function的方式回调,没有用类。

  1. #!/bin/env python 
  2. import re, sys 
  3. # Define parser first. 
  4. def baidu(username): 
  5.   # Business logic 
  6.   return "Using parser Baidu. and the user's name is: %s." % username 
  7. def qzone(uin): 
  8.   # Business logic 
  9.   return "Using parser Qzone, and the user's QQ is: %s." % uin 
  10. # From web.py 
  11. def group(seq, size):#{{{ 
  12.   ""
  13.   Returns an iterator over a series of lists of length size from iterable. 
  14.     >>> list(group([1,2,3,4], 2)) 
  15.     [[1, 2], [3, 4]] 
  16.     >>> list(group([1,2,3,4,5], 2)) 
  17.     [[1, 2], [3, 4], [5]] 
  18.   ""
  19.   def take(seq, n): 
  20.     for i in xrange(n): 
  21.       yield seq.next() 
  22.   if not hasattr(seq, 'next'): 
  23.     seq = iter(seq) 
  24.   while True: 
  25.     x = list(take(seq, size)) 
  26.     if x: 
  27.       yield x 
  28.     else
  29.       break 
  30. #}}} 
  31. def parser_init(url,mapping): 
  32.   for pat, what in group(mapping,2): 
  33.     result = re.compile('^' + pat + '$').match(url) 
  34.     if result: 
  35.       return what, [x for x in result.groups()] 
  36.   return None, None 
  37. if __name__ == '__main__'
  38.   mapping = ( 
  39.       'http://(?:hi|space).baidu.com/([^/]+)(?:/.*)?','baidu'
  40.       'http://(/d+).qzone.qq.com(?:/.*)?','qzone'
  41.       ) 
  42.   (func, args) = parser_init(sys.argv[1],mapping) 
  43.   if func: 
  44.     callback = func 
  45.     if func in globals(): 
  46.       callback = globals()[func] 
  47.     if callable(callback): 
  48.       print callback(*args) 
  49.   else
  50.     print 'No parser found.'

希望本文所述对大家的Python程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表