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 专题三 字符串的基础知识
Mar 19 Python
Python 转义字符详细介绍
Mar 21 Python
Python探索之SocketServer详解
Oct 28 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
Python Django view 两种return的实现方式
Mar 16 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python中类与对象之间的关系详解
Dec 16 Python
利用python实现后端写网页(flask框架)
Feb 28 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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
js实现转动骰子模型
2019/10/24 Javascript
JS实现随机点名器
2020/04/12 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
电钳专业个人求职信
2014/01/04 职场文书
视光学专业自荐信
2014/06/24 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技