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中遍历文件的3个方法
Sep 02 Python
Python实现栈的方法
May 26 Python
Python编程中的异常处理教程
Aug 21 Python
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
python字符类型的一些方法小结
May 16 Python
Python构建XML树结构的方法示例
Jun 30 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
pandas 层次化索引的实现方法
Jul 06 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
Django获取应用下的所有models的例子
Aug 30 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
python工具——Mimesis的简单使用教程
Jan 16 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
如何去掉文章里的 html 语法
2006/10/09 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
php实例化一个类的具体方法
2019/09/19 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python实现partial改变方法默认参数
2014/08/18 Python
python函数局部变量用法实例分析
2015/08/04 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
Keras自定义IOU方式
2020/06/10 Python
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
销售演讲稿范文
2014/01/08 职场文书
文体活动实施方案
2014/03/27 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫