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 SqlAlchemy
Feb 12 Python
用Python解决计数原理问题的方法
Aug 04 Python
Python快速排序算法实例分析
Nov 29 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
Django 实现购物车功能的示例代码
Oct 08 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
python如何写出表白程序
Jun 01 Python
Python 解析简单的XML数据
Jul 24 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 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使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
web打印小结
2017/01/11 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
python 生成不重复的随机数的代码
2011/05/15 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
企业精细化管理实施方案
2014/03/23 职场文书
二审答辩状格式
2015/05/22 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
css3 文字断裂效果
2022/04/22 HTML / CSS