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系列之数据处理编程实例(一)
May 22 Python
编写Python脚本使得web页面上的代码高亮显示
Apr 24 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python 中Operator模块的使用
Jan 30 Python
python反编译教程之2048小游戏实例
Mar 03 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
python tkinter Entry控件的焦点移动操作
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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
javascript 写类方式之七
2009/07/05 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
编辑个人求职信范文
2013/09/21 职场文书
九年级科学教学反思
2014/01/29 职场文书
冬季安全检查方案
2014/05/23 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
农行心得体会
2014/09/02 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
python turtle绘图
2022/05/04 Python