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模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
Python实现的快速排序算法详解
Aug 01 Python
微信跳一跳python辅助脚本(总结)
Jan 11 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
python开头的coding设置方法
Aug 08 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python 三元运算符使用解析
Sep 16 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
基于django micro搭建网站实现加水印功能
May 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python中的super用法详解
2015/05/28 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
如何在django中添加日志功能
2020/02/06 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python实现人工蜂群算法
2020/09/18 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
英语系本科生个人求职信
2013/09/21 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
村官工作鉴定评语
2014/01/27 职场文书
优秀员工评语
2014/02/10 职场文书
小小的船教学反思
2014/02/21 职场文书
工作求职信
2014/07/04 职场文书
公司踏青活动方案
2014/08/16 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
大学生实习推荐信
2015/03/27 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
Python如何识别银行卡卡号?
2021/06/10 Python
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
js判断两个数组相等的5种方法
2022/05/06 Javascript