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实例之wxpython中Frame使用方法
Jun 09 Python
浅析python 内置字符串处理函数的使用方法
Jun 11 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
Python连接mssql数据库编码问题解决方法
Jan 01 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
Python实现的简单算术游戏实例
May 26 Python
Python中有趣在__call__函数
Jun 21 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
详解python中*号的用法
Oct 21 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
python爬取新闻门户网站的示例
Apr 25 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
Python实现批量读取word中表格信息的方法
2015/07/30 Python
详解python的ORM中Pony用法
2018/02/09 Python
便捷提取python导入包的属性方法
2018/10/15 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
中学家长会邀请函
2014/01/17 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
投标诚信承诺书
2014/05/26 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
六一儿童节活动总结
2014/08/27 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Java基础-封装和继承
2021/07/02 Java/Android