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利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python3中的列表,元组,字典,字符串相关知识小结
Nov 10 Python
对numpy中轴与维度的理解
Apr 18 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
PyQt5实现简易计算器
May 30 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
python多线程扫描端口(线程池)
Sep 04 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
Python 串口通信的实现
Sep 29 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使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
PHP实现文件上传与下载
2020/08/28 PHP
js静态作用域的功能。
2006/12/25 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python简明入门教程
2015/08/04 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python如何使用字符打印照片
2020/01/03 Python
Python如何存储数据到json文件
2020/03/09 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
上课玩手机检讨书
2014/02/08 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
新学期开学标语
2014/06/30 职场文书
治庸问责心得体会
2014/09/12 职场文书