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 文件重命名工具代码
Jul 26 Python
Python日志模块logging简介
Apr 13 Python
python中sys.argv函数精简概括
Jul 08 Python
numpy中loadtxt 的用法详解
Aug 03 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
python 对key为时间的dict排序方法
Oct 17 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 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环境――Appserv
2006/12/13 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
在Mac OS上搭建Python的开发环境
2015/12/24 Python
详解Python迭代和迭代器
2016/03/28 Python
Python MD5加密实例详解
2017/08/02 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python安装scipy的方法步骤
2019/06/26 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
ktv总经理岗位职责
2014/02/17 职场文书
cf战队收人广告词
2014/03/14 职场文书
学生会部长竞聘书
2014/03/31 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
交通事故调解协议书
2015/05/20 职场文书
企业宣传稿范文
2015/07/23 职场文书
学子宴致辞大全
2015/07/27 职场文书
python for循环赋值问题
2021/06/03 Python