Big Bug Ban

兴趣 践行 创新

Archive for 2月, 2013

python版网页抓取器railgun

 

实在受困于主机资源,跑个java几百M的内存就去了。

所以用python重新写了一份railgun。

比java版的更简洁,去掉了一些用不上的部分。包括抓取后的全文索引和数据库mapping部分。

现在它只是一个简单的抓取框架了,一个python的简单抓取网页的工具。

可以让用python抓取网页更加方便,轻松+愉快。

使用方式详见里面的有个现有所有功能的demo

项目主页:
https://github.com/princehaku/pyrailgun

下载地址:
https://pypi.python.org/packages/source/P/PyRailgun/

也可以从pipi安装
https://pypi.python.org/pypi/PyRailgun

简单的使用说明:

怎么使用? 首先你需要创建一个对应站点的规则文件 比如testsite.yaml
你的所有抓取过程,解析规则,都是在yaml文件里面定义的

  1. action: main
  2. name: “vc动漫”
  3. subaction:
  4. – action: fetcher
  5.   url: http://www.verycd.com/base/cartoon/page${1,1}${0,9}
  6.   subaction:
  7.   – action: parser
  8.     rule: .entry_cover_list li
  9.     subaction:
  10.     – action: shell
  11.       group: default
  12.       subaction:
  13.         – {action: parser, rule: ‘.entry_cover .cover_img’, setField: img}
  14.         – {action: parser, rule: ‘a’, pos: 0, attr: href, setField: src}
  15.         – {action: parser, strip: ‘true’, rule: ‘.entry_cover .score’, setField: score}
  16.         – {action: parser, rule: ‘.bio a’, setField: dest}
  17.         – action: fetcher
  18.           url: http://www.verycd.com${#src}
  19.           subaction:
  20.           – {action: parser,strip: ‘true’, rule: ‘#contents_more’, setField: description}

规则差不多就像你上面看到的这些,demo里面也有几个特殊的

接下来就可以在代码里面使用它了,把它作为一个任务加入到railgun

  1. from railgun import RailGun
  2.  
  3. railgun = RailGun()
  4. railgun.setTask(file(“testsite.yaml”));
  5. railgun.fire();
  6. nodes = railgun.getShells(‘default’)
  7. print nodes

你就可以得到一个包含了所有解析后数据的节点列表。

[{img:xxx,src:xxx,score:xxx,dest:xxx,description:xxx},{img:xxx,src:xxx,score:xxx,dest:xxx,description:xxx}]

接下来怎么使用他么就是你随意的事情老!

Written by princehaku

2月 28th, 2013 at 12:32 上午