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 15 Python
Python找出9个连续的空闲端口
Feb 01 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
python 读写中文json的实例详解
Oct 29 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python随机函数random()使用方法小结
Apr 29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
Python实现Singleton模式的方式详解
Aug 08 Python
python系列 文件操作的代码
Oct 06 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python 实现Mac 屏幕截图详解
Oct 05 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函数(简单整理)
2010/04/30 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Random 在 Python 中的使用方法
2018/08/09 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
优秀党员主要事迹
2014/01/19 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
建筑工地标语
2014/06/18 职场文书
化工专业求职信
2014/07/01 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
领导工作表现评语
2015/01/04 职场文书
结婚保证书
2015/01/16 职场文书