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 23 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
django中forms组件的使用与注意
Jul 08 Python
python编写简单端口扫描器
Sep 04 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
解决python3输入的坑——input()
Dec 05 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
python 实现有道翻译功能
Feb 26 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程序实现支持页面后退的两种方法
2008/06/30 PHP
php 三维饼图的实现代码
2008/09/28 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pandas对指定列进行填充的方法
2018/04/11 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
生物技术毕业生自荐信
2013/10/23 职场文书
教代会开幕词
2015/01/28 职场文书
销售经理岗位职责
2015/01/31 职场文书
英文慰问信
2015/02/14 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
初中物理教学反思
2016/02/19 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android