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


Posted in Python onJuly 18, 2015

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

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

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

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

#!/bin/env python
import re, sys
# Define parser first.
def baidu(username):
  # Business logic
  return "Using parser Baidu. and the user's name is: %s." % username
def qzone(uin):
  # Business logic
  return "Using parser Qzone, and the user's QQ is: %s." % uin
# From web.py
def group(seq, size):#{{{
  """
  Returns an iterator over a series of lists of length size from iterable.
    >>> list(group([1,2,3,4], 2))
    [[1, 2], [3, 4]]
    >>> list(group([1,2,3,4,5], 2))
    [[1, 2], [3, 4], [5]]
  """
  def take(seq, n):
    for i in xrange(n):
      yield seq.next()
  if not hasattr(seq, 'next'):
    seq = iter(seq)
  while True:
    x = list(take(seq, size))
    if x:
      yield x
    else:
      break
#}}}
def parser_init(url,mapping):
  for pat, what in group(mapping,2):
    result = re.compile('^' + pat + '$').match(url)
    if result:
      return what, [x for x in result.groups()]
  return None, 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)
  if func:
    callback = func
    if func in globals():
      callback = globals()[func]
    if callable(callback):
      print callback(*args)
  else:
    print 'No parser found.';

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

Python 相关文章推荐
python正则表达式re模块详解
Jun 25 Python
Python通过select实现异步IO的方法
Jun 04 Python
python绘制条形图方法代码详解
Dec 19 Python
详解Python使用tensorflow入门指南
Feb 09 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
Python对象与引用的介绍
Jan 24 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python networkx包的实现
Feb 14 Python
django ORM之values和annotate使用详解
May 19 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 #Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 #Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 #Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 #Python
在Django的URLconf中使用命名组的方法
Jul 18 #Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 #Python
在Django的URLconf中进行函数导入的方法
Jul 18 #Python
You might like
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
php实现多维数组排序的方法示例
2017/03/23 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
ExtJS 入门
2010/10/29 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
10个经典的网页鼠标特效代码
2018/01/09 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Python 调用DLL操作抄表机
2009/01/12 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
浅谈Python中的模块
2020/06/10 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
暑期研修感言
2014/02/17 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
大气污染防治方案
2014/05/19 职场文书
创先争优活动承诺书
2014/08/30 职场文书
2014年副班长工作总结
2014/12/10 职场文书
爱情保证书
2015/01/17 职场文书
写给老师的感谢信
2015/01/20 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
话题作文之呼唤
2019/12/18 职场文书
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers