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 相关文章推荐
Django自定义分页与bootstrap分页结合
Feb 22 Python
python数据结构之链表详解
Sep 12 Python
实例分析python3实现并发访问水平切分表
Sep 29 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
pytorch 修改预训练model实例
Jan 18 Python
如何使用python代码操作git代码
Feb 29 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
python实现三阶魔方还原的示例代码
Apr 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
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
机器学习python实战之决策树
2017/11/01 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python OpenCV实现视频分帧
2019/06/01 Python
基于python调用psutil模块过程解析
2019/12/20 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
Python如何读写CSV文件
2020/08/13 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
大一学生职业生涯规划
2014/03/11 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
领导欢迎词致辞
2015/01/23 职场文书
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL