Python Spider: a Quick and Dirty Aproach

Published on Apr 01, 2015

面试的时候,面试官问我这些年瞎折腾有什么主线,我说有,但又不想说我他妈的其实想做的是发现数据中的知识,我要构建用户和产品的桥梁,让设计师的梦想照进现实。更不好露出自己的獠牙恶狠狠地说,而不是你们扯jb淡的安全。想了想,还是说了些不着边际的东西。这违背的初心和四处的张望自然没有逃过面试官一双柔和但不失犀利而充满智慧双瞳,我感受到那友善的目光,知道这安全的面试到头了。

想要分析数据,首先要有数据。得益于互联网蝗虫般铺天盖地的扩张,数据渐渐不再是问题。专业的数据科学家会从某些高质量的数据仓库下载供他们玩弄各种理论算法和工具的数据,我是野路子,从一开始,就开始自己去爬取数据,清理数据,当然,最后依然在这个脏活累活的阶段,比那些张口深度学习闭口大数据的数据科学家低到不知道哪里去了。

写爬虫是个很意外的开始,好奇人人上好友之间的关系,认真学习的第一门语言是R,因为上课挺老师说sas太贵了,上课是因为数学建模,数学建模是因为被同学晃进去了,总之,我从来没觉得命运是掌握在自己手中的,或者积极点,很高兴人生是充满意外和惊喜的。

总之,精通R语言的陈某某在统计之都上发了个R做聚类的什么文章,其中的某张图意外的击中了我哪根不对头的神经,不知不觉酝酿了多年后,就成了现在这个鬼样子。

后来做安全,听到那些高深莫测的高人们一致同意渗透的第一步和最重要的一步就是信息搜集。为了表示自己是属于高人哪一类的,我举起了四只脚表示同意。于是就开始各种写爬虫搜集信息,从某个站点所有的文档中的元信息到返回信息等等,但我从不做坏事,我只下载公开信息,显然安全专家们觉得我这点非常low,谈及此事,它们不屑一顾,而是不断的问我有什么光环,挖出过什么漏洞。我自然没有,终于也只是在第一个层级上不断搜集信息。

有段时间做爬虫,团队有个愿景是把全宇宙的网站都爬下来,这当然不是我们的愿景,但这只能是我们的愿景。我们开着2M联通小水管,开始phantomjs刷刷刷,搜集互联网上来路不明的代理,不断切换刷刷刷,最后做了些什么我也不知道。投资人显然对此不甚满意,我们太low了,没有做到什么百万并发千万集群,也没有统治宇宙。但投资人眼里某些公司做到了,然后,没钱就没有然后了。

于是,我依然很low,数据科学家看不上、爬虫专家们看不上、安全专家们看不上、做底层和硬件的觉得我朽木难雕。总之,它们好像心有灵犀似的,都相互默契的微微一笑,对我说出了那句熟悉的台词:你是个好人,但我们不合适。我想了很久,却觉得话里透露着其它意思,好像夜里狮子的心,狼子的肺似的总让人觉得不对劲,夜里翻来覆去无数遍,重放了多次之前的场景,之前的只言片语终于串联起来,都明明白白指着一个意思:你哪方面都很渣啊。

这让我感到惶恐,又有些些许无奈,我觉得那些面试官们都是好人,也佩服和仰慕他们在领域内的修为。他们谆谆教导我可以去看看这些那些,耐心地对我进行指引。我的理智非常感激它们,身体却无比诚实。那时,在身边刷题算法的大潮涌动下,我立下誓言,我他妈的要刷算法去谷歌,然后打开leetcode看了两行,就知道谷歌比我不知道高到哪里去了。我这种算法结构一窍不通,编译链接通通报错的渣渣就开始做把杭州某巨大集团招聘信息转换成组织架构这种于人于己都无关紧要吃力不讨好的事。如果你看过王小波的某本书,你会知道这是个减熵的过程。这绝对违背自然规律,也违背我想要为社会做贡献,让公司赚大钱,让世界更美好的崇高理想。

总之,我的理想已经碎了。

多年前,我看到个人计算机的发明者去做牙医,妇科圣手玩转安全、乔布斯不好好学习学习字体理论等等不务正业的故事都深受鼓舞,现在忽然就发现这其实是世界的险恶用心,不,应该是世界的温柔。

在大学的某个时候走上的歪路,是时候终结了。我想过成为一名心理医生、一名律师、一名原画师,一名设计师、一名光学工程师、一个前端工程师、一个数据挖掘工程师、一个误人子弟的老师、一个做或不做技术的销售,一个满嘴跑火车产品经理、一个天马星空运营专员,一个文笔自由的诗人、一个想唱就唱的行吟歌手 ……现在,该醒醒了。照照镜子,看看镜子中狼狈不堪的那只,凄厉地汪两声感觉下现实冰冷的空气。

这才发现跑题跑得好远,思维跳跃和宽广这种属性在某个工业社会里一定不是什么好事,因为成为一个产线上可以替换的零件比成为一个人重要的多。但是,现在这个世界身在何处,又要往哪里去呢?

总之,这篇文章是回顾下哪些年写过的渣爬虫,而不是扯淡。我喜欢这种感觉要完蛋了他妈的结果又回光返照的奇葩经历。你们听过燕姿的天嘿嘿么,每当到某个地方时,我都觉得这首歌唱完了,结果她又来了一句。

就是这样。

所以,又多说一句。某个不错地方的技术面问了这么个问题,你对加班怎么看,你能不能抗住巨大的工作压力。我不知道这个问题的初心是啥,总之觉得又不是新部门或者创业公司,该部门的管理很差劲效率极低,同时不把员工当人看。又一个朋友去了一家小小的创业公司,虽然每天晚上最早十点多才回,却私下跟我说氛围比较轻松其实挺开心的,这是某个一到下班恨不得每个人都逃离的某某地方望尘莫及的。所以怎么看,把个人动力和公司利益结合起来是我等随时可替换的渣渣工人毕生人生追求,我自觉在这条卖身的道路上卖的还不够不可持续发展,需要更加努力的提升自己的思想道德水平。当然,冠冕堂皇的说辞还是抄袭左耳朵耗子老师比较稳妥。

祝上文提到的创业公司发展壮大,该团队还有我很崇拜的大神呢ლ(╹◡╹ლ)

以下是正文,我之前发在byr论坛上,现在搬到一起,向过去告别:


你用python做什么?

很严肃的东西:比如项目、工作、比如blablabla

你学一门语言为了干什么?

因为好奇、因为想提高自己、因为blablabla

然而一门语言真正能干什么?

复杂的东西离我们太远,我们不用构建一个成千上万用户级的大型网站、不用计算火箭轨道、不用尝试穷举破解密码系统,不用在云端与大数据共舞,在集群中并行。那些听上去离我们很远。

简单的东西太不堪入目。打印出钻石型的字符串、编写一个能读取我们输入的C程序、计算一个字符串的长度,做小学应用题……

一门语言应该这样、即使没有深厚的数据结构和算法基础,你依然知道可以用它来真正的做到你想要做的事情。同时不用过分陷入底层的细节和种种优化问题。

我觉得python一定程度上做到了这点,真的是一门属于每个人的计算机语言。无论他/她是什么背景。

Let's Rock With Python now.

For fun and profit.

看了看不想写了……好麻烦……

如果有空,一点一点更吧。

环境配置-–—工欲善其事,必先利其器

我在linux下使用python,强烈建议任何没什么特殊要求的人在linux环境下使用python。最不济,也得是unix吧。

如果,你坚持在windows使用python。给您个参考:http://v2ex.com/t/127612

所谓quick and dirty,是因为我实在没有本事把代码写得优美、高效,它能起作用,管它什么样子我也懒得去管它了。我个人没有不断优化啊封装啊的癖好和耐心。仅仅做到我想做的事就够了。

所以,如果下面的代码看上去不堪入目、那就对了……

首先讲环境的配置,强烈建议你使用ipython, ipython提供了一个增强太多的交互shell,让你能像使用matlab一样一边试验一边写代码,以一种迭代开发模式来完成心愿,我觉得这是解释型语言的一大优点。

另外python3能让生活变得简单,但也许你像我一样懒,那2就2吧。

linux下安装ipython很简单,用包管理器比如apt-get安装就是了,别傻兮兮的自己编译。

sudo emerge ipython

还需要python的包管理器。一般叫pip或者python-pip或者类似名字的

sudo emerge pip

接着需要安装一些常用的非标准库中的模块, 这时你可以使用linux的包管理器来装(查清楚名字,不同发行版打包不一样),如果有的话最好。

sudo emerge requests gevent lxml scrapy selenium

或者用pip来装。(有些模块会依赖其它东西比如lxml会依赖libxml2,要是我没记错的话,如果出错认真看错误信息,不会有什么奇葩问题)。

pip install --user requests lxml gevent Scrapy selenium

如果想让人生简单一点,就别傻兮兮的下载各个python模块的包自己手动装。

然后,完事了,就是这么简单。别听上面的讨论瞎扯要什么四个小时,这时候就可以天马行空的hacking了,什么nose什么virtualenv等等真不是必要的。

linux下简单的配置,你就可以干很多事情了。不相信,那以后再说吧。

最后的结果,应该像这里https://www.python.org/shell/

如果你那个交互式控制台加载不进来,那么你大概需要翻墙,不然google打不开、stackoverflow加载不了还怎么愉快地玩耍。chon同学似乎在做vpn https://moevpn.com/, you may consider it。想想像chon大大这么用python构建严肃应用的才叫牛逼啊……

洗衣服去了,有兴致了再说,忘记了就算了。

基本爬虫这种东西,写着写着就从find到re从re到xpath/css selector最后没有啥性能要求的就愉快的开始selenium……