[关闭]
@buptzym 2016-08-18T14:15:21.000000Z 字数 1424 阅读 702

etlpy+Hawk 最强数据采集系统

未分类


哈哈,写完这个标题,我出了一口凉气,我并不喜欢吹牛。没事的时候逛八爪鱼啊这那的采集器网站,吹得神乎其神,当然最后肯定是,初级版200元,中级版1000元...此时就该我去点左上角的红点了。

写了etlpy,也写了Hawk,让我反思,终极的数据抓取工具是什么样子呢?我曾经一直想做普通人也会用的爬虫工具,这个目的虽然实现了(Hawk),但是让程序员用的更爽,似乎更有意义,普通人使用这套软件的频率真是太低了。另一方面,在我司浸淫三个月,让我认识到了在绝大多数*nix程序员的眼中,带界面的程序都很low。仔细想想,大神们玩编译器,深度学习,概率图模型,你却还在那里苦逼地调样式改界面,那和大神的差距岂不是越来越大了?要想赶时髦,没搞过tensorflow,在我司都不敢抬头的。

另外一方面,做图形界面,会严重拖住你的想象力,在开发新功能的时候,你不得不去想,这个东西在UI上怎么呈现,这太不酷了。如果把爬虫和tn引擎(tnpy)整合,这个能量有多强?

爬虫还是要做的,所以杭州的某个雨夜,我望着窗外的车流人流,决定彻底扔掉包袱,新版本的etlpy**完全不依赖也不兼容Hawk**,而是在2000行代码的基础上,实现了远比3w行Hawk强大得多的功能。妈的,想想之前在界面上花的时间,我的心在滴血。

先罗列一下目前etlpy的特性:

这些是之后准备实现的高级目标:

于是,语言才是一套工具的头等公民,我尽量提升了代码的语义密度(可以参考之前的那篇文章),于是,爬取知乎精华列表的代码,就像下面这么简单:

  1. #新建网页采集器
  2. url='https://www.zhihu.com/topic/19551137/top-answers'
  3. s=spider('zhihu')
  4. s.visit(url).great_hand().accept().test().get()
  5. #获取50页精品列表内容
  6. t=task('list')
  7. t.rangege('id',max=50)
  8. t.merge('id:url',script=url+'?page={0}')
  9. t.crawler('url',selector='zhihu')
  10. data=t.get(take=5000)

data就是你想要的数据。全部代码没有一点点废话,清爽简洁。如果你熟悉Hawk,这种链式函数就代表你的一次拖拽,great_hand()就是手气不错, accept()就是接受检测结果。rangege就是一个生成区间数的生成器,merge就是合并多列...
etlpy提供了丰富的执行参数:

你也许不知道每个函数的功能是怎样的?配合ipython notebook,可以随时方便的自动提示,显示使用帮助,从此做爬虫简直成了一种享受。

除此之外,还有:

网页采集器自动推断

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注