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中input和raw_input的一点区别
Oct 21 Python
Python获取网页上图片下载地址的方法
Mar 11 Python
python使用psutil模块获取系统状态
Aug 27 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python学生管理系统的实现
Apr 05 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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中创建并处理图象
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
详解php反序列化
2020/06/10 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
详解python和matlab的优势与区别
2019/06/28 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
简述数据库的设计过程
2015/06/22 面试题
运动会稿件50字
2014/02/17 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
行政专员求职信范文
2014/05/03 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
计划生育汇报材料
2014/12/26 职场文书
商超业务员岗位职责
2015/02/13 职场文书
民事申诉状范本
2015/05/20 职场文书
2019入党申请书格式
2019/06/25 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS