菜鸟也想玩搜索引擎——我与搜索可以不说的故事

1.1 缘于Java,源于爬虫

  这一段打算写一篇关于自己做的一个简单搜索引擎JobSearch(真的很简单,大牛路过即可),但请容我先扯会儿淡,酝酿酝酿情绪。

  若是一年之前你问我是搞什么的,我会毫不犹豫地告诉你我是个C#er,我从大一暑假接触到C#,之后的两年便使用C#开始了我的程序员生涯:我用她写了第一个网站;用她赚到了人生第一桶金;用她脱颖而出,获得老师的青睐,获得同学们的赞赏。虽然Java、C#、C++之争从未平息,但是我一直坚信无论哪门语言,只要学到精深一样能取得成就。

  或许没有意外我会一直学习C#(其实我更愿意说.net),大四早早的去实习,找一份C#的工作一直坚持下去。然而事实去并非如此,在大二上学期期末时我在的工作室接到一个项目:某公司想要建立一套知识库,其中一部分是像百度文库那样的文档库,然而手头却没有资源,希望我们这边能够帮忙采集,说白了就是做个文档采集的爬虫。当时我们对于爬虫一词毫无概念,老师只给了上届师兄做的一个爬取亚马逊图书分类和图书信息的程序,而且要求两周之内能出个原型。没办法,我们只好硬着头皮上了。当时真是精力充沛,整天都在查资料、写程序测试。经过两周的折腾终于出来了第一版,我还用心为其做个icon。程序在之后寒假挂在服务器上跑了一个月的时间,等过完年回来时惊喜的发现已经下载10w+的文档,而且还是程序在运行第七天就挂掉的情况下(现在看来其实够烂的,刚刚跑了下jobsearch不到15分钟就2k+了)。之后经过大家的努力,半年后每月能交付有效文档300w+,然而遗憾的是公司方面很快就叫停了,说文档差不多够了(据说钱是按交付文档量给的,而且他们自己也在做抓取)。

  在这次的项目中,我见识到了爬虫的魅力:将互联网上的海量信息据为己有真的很爽(当时有同学一直建议做个爬虫爬H,当然作为正人君子我义正言辞的拒绝了)。恰好也是那个时候有个叫“云”东西在中国流行,随之铺天盖地而来的就是大数据处理、数据挖掘等等,同时IT巨头谷歌被离开了大陆、运动员邓亚萍搞了个人民搜索,连新华社和中移动都把大神搬出来做了个盘古搜索,在关注这些的时候我认识了全文检索工具luence,知道了有很多开源的爬虫heritrix、larbin,甚至有完整的搜索引擎nutch等等。而且懂得了像百度、谷歌这样的搜索引擎想要完成一个看似简单的查询需要完成负责的工作。

  我觉得我与这些技术有缘,在接触到她们之后我就爱上了这些技术。由于C#的天生环境所限,.net平台下的成熟开源软件并不多,于是我开始尝试用C#仿照java的开源项目写出一个搜索引擎,然而最后以失败告终:水平不行却想急于求成。当你迫切想得到一样东西却不知道如何得到时是十分痛苦的。我看了很多技术博客,要么只是浅尝辄止的谈谈(都懂了),要么就是很深入的分析(看不懂)。我也看了两本国内相关的书,看后觉得还不如去看看博客。

  就这样折腾了一个学期,虽然学到了很多知识,但是技术层次的东西却收获很少。当时大三已过半,很多人已经开始考虑以后的方向,我也开始思考:想要以后从事这方面工作,C#可能很难找到工作,既然C#不好搞,那就学java吧,起码可以先学会使用那些开源软件,进而研究她们。而且一位老师的话很有启发:以后的职业目标应该是某一领域的专家,而不是一个语言专家。就此,我慢慢变为一个Javaer。

1.2 华丽转变,惨淡收场

  正如我现在所烦恼的,由于有了C#的基础(其实C#基础也很一般,啥反射、代理基本上都忘完了),Java基础基本没用心看过,感觉反正都差不多,遇到不会的查资料就行,虽然这样写代码很容易上手,但是这样做的最大弊端就是基础不牢,在设计很多java特性的地方不明所以。虽然如此,好在写代码、看代码没有问题,这期间学习了Lunece、heritrix,虽然最中都没用深入,但是基本上使用没问题了。这是正好赶上课设,心里不禁开始痒痒,想要练练手,于是就写了一个乐视网视频抓取程序和将要介绍的JobSearch。

  乐视网视频抓取程序主要因为当时校网速度很烂,唯独乐视网速度很快(抓包分析了下发现当地有服务器,而且可能有教育网的线)。于是就想把乐视的视频抓取下来,在校内做个视频服务器。当时页面、视频信息抓取都搞定了,但是到抓取视频时卡住了:抓包可以直接获取视频地址,但是由视频播放页面去不知道怎么获取地址,只知道地址肯定蕴含在一串乱码里边。当时分析了俩星期也没搞定,最后由于杂事太多就放弃了。之后没事又分析了下,突然发现页面引用的的js文件历里边有个base64函数......果不其然,试了下果然是base64编码,奈何这是乐视已经不给力了,高校中也有个某公司做的校内视频客户端开始流行。(呵呵,再次证明最绝的防下载方法就是视频文件加密了,前几天帮外边公司测试个系统发现上边的视频都是明链,好生让我们鄙视了一下,你起码学学人家乐视起码也能难倒不少人啊)

  既然第一个流产了,只有再做一个了。正好赶上当时上届师兄们毕业,就想把当时主流的招聘网站关于应届、校招的信息都爬下来,然后做个搜索引擎,待到我们明年毕业时查询信息岂不方便?由于赶着做课设,就打算先个简单点的。事实证明之前的积累还是有用的,仅仅3天时间就完成了,当时还小得意了一把(这就是将要介绍的JobSearch),但是只针对51job的信息,而且直接爬取列表页,而不能由主页自动广度爬取。

  本来接下来准备完善这个程序的,然而有些事让我走上了考研之路。

1.3 为了梦想,投身考研

  在大三下学期,两个技术很好的好友相继决定考研,而且原因基本上一致:希望毕业之后能够从事技术研发,而且能够一直从事下去,而就国内目前的状况来说,能让你刚毕业就不担心生计问题而能全心去搞研发,基本上只有大型互联网公司和某些研究所可以做到。而作为一个普通的二本学校一个天资不算聪慧、又不能夜以继日疯狂的去啃数学、算法的学生而言,想进这些公司很难很难。(我想特别声明一下的是,我并不是说考研就一定好,一定比本科生强,但是有些东西是需要基础的,比如搜索技术,涉及到的分词、聚类、排序、检索、滤重、遍历等算法都是需要有很好的数学和算法底子的,就普通学校的氛围,我想很多人毕业时连一个简单的统计分析题都做不出来。而且无论我们接不接受,事实上随便一个侧重算法的招聘职位,一般都要求研究生以上学历。)或许非常努力的话也能做到,但考研绝对是个捷径。事实上我也认识到指望学会用用那些开源软件,写几个简单的爬虫(前一段在技术群里交流,突然发现个有趣的问题,似乎搞java的几乎都写过爬虫)根本不足以完成一个真正的搜索引擎。

  就这样伴随着家人的推动我走上了考研之路,然而这条路现在说多了都是泪啊。或许真不是坐那学习的料,每天学习的时间还没逛技术论坛时间长,几天不写代码心里就痒痒,于是接了毫无技术的小网站,最后耽误了不少时间(XX的,天天改界面,好在最后给的报酬还算可以)。值得一说的是后来带着几个人天天玩lol,也算填补了大学没有疯狂的空白,结局就是我们几个都没考上。其中一个更是在报考时突然拉着箱子北上做C++了(事实上他混的真不错,据说转正准备直接开7k)。

1.4 跌倒了爬起来,梦依旧

  考研之后本来打算出去,结果被毕设拖住了,做的一个管理系统,技术毫无难度,但是很费时间,而且还下挂三个人。这段时间心情比较低落,研没考上,而且错过了最佳找工作的时机,前路不禁有些迷茫。这是有几个技术不错的同学出去找工作(都有不少实际项目经验,写一般程序没一点问题),结果碰了壁:被很多基础问题卡住了。我扪心自问了一下,发现自己不见得比他们做得好。这时前边提到的那同学回来做毕设,和他聊了聊发现他对公司不太满意,最大的原因是觉得同事水平不高,技术氛围不够好,而且强调其实最重要的还是基础,一般的程序是个人只要培训下都能写,只有基础好才能想更高层次发展。

  其实刚开始挺受打击的,当初我们一起搞的C#,而今却有很大差距。原因其实主要是自己过于浮躁。但是既然发现自己的不足,那就精力去弥补吧。到这里其实和搜索已经没啥关系了,但是我会一直坚持下去的,哪怕只能作为业余爱好。

  正如前几天和朋友说到:我现在孤身一人,担忧者唯有父母,只要他们安康,毕业时只待我去闯荡。梦若不碎,梦依旧!

posted @ 2013-04-08 22:23  oO脾气不坏Oo  阅读(1983)  评论(14编辑  收藏  举报