通过自学找一份Python爬虫工程师的工作

最近忙于准备婚礼,博客没能稳定更新。之前为了找工作,写了很多爬虫实战的文章。现在工作找到了,我想对这段时间的经历做一个总结,打算用三篇文章完成这个事情:

  • 本文。交代一下我的背景、自学了点什么(看了什么书、哪些博客、做了什么)、找工作用了什么招聘平台,面试的过程是什么样的;

  • 我所理解的爬虫和反爬虫;

  • 应该如何构建一个稳定的爬虫系统。

另外,我准备把我之前关于爬虫实践的文章逐步转移到简书,之后争取两边同步更新。

正文

网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网网络机器人

这个定义其实并没有特别指出爬虫和Python的关系。事实上,只要能实现HTTP或HTTPS协议的语言就能写爬虫程序。当然如果这门语言同时又有封装好的便于对网页内容进行处理的包,那就更好了。目前我见过用C++、Java和Python写的爬虫,Python的占多数,其他语言我不太清楚。

另一个有趣的事实是:爬虫和Python的交集也很有限。如果用Python写爬虫,你只要掌握一些常用的Python语句格式和一些和爬虫相关的库即可,写起来不难,难在分析和破解网站的反爬虫机制,这个我在另篇文章里会仔细讲。所以说爬虫高手并不等于Python高手。最近我正在看两本书《流畅的Python》和《Python Cookbook》,不得不说,收益良多,感觉之前自学的都是假Python,之后我会整理一下和大家分享。

这里我主要还是讲一下找工作相关的事情。

首先我是很不赞同诸如《X小时Python入门》、《学爬虫掌握这X个库就好了!》、《5分钟,6行代码教你写爬虫!》之类的文章的。私以为此类文章标题投机取巧、对知识点的讲解浅尝辄止,很容易给新人造成一种“原来这么简单”的错觉,等到日后幡然醒悟,重新学习不谈,时间已经浪费掉了。虽然我从开始学习Python和爬虫到最后找到工作实际用了不到六个月的时间,但是这是有原因和运气成分的,我不想给人造成一种我很厉害的假象,同样我也不想给人造成这个过程很简单的假象。

入门Python

其实在自学Python和爬虫之前,我写过很长一段时间的C,读硕期间也写过Java、php、js等等,甚至Ruby。因此上手一门新语言对我来说并非什么难事。更何况其实Python还是继承了很多C的思想的,有共通之处。

除了各种各样从网络上搜索出来的文章,学习Python我主要看了如下几个内容:

看完这两部分之后,就可以算入门了。此时你应该已经可以用Python编写一些简单的命令行程序,没问题,目标达成。

  • Python的官方文档,现在最新的版本是3.7.0。和其他任何语言或框架的官方文档一样,Python的文档是很详细的,甚至会用大篇幅介绍一个基本用不到的东西。但是相信我,看阅读官方文档比看网上一些教程要有用的多。而且我推荐阅读英文版的。

实不相瞒,到了这一步就已经满足编写Python爬虫的要求了,之后遇到什么不会写或者不知道怎么写的代码,在用搜索引擎之前先查阅一下官方文档,查漏补缺,进步会很快。

如果是没有编程基础的人想要学Python呢?说实话,我不确定怎么做是最有效率的。如果你有充足的时间,我仍然建议你通读一遍Python文档,有可能的话把涉及到代码都自己打一下。如果时间不足想要速成,网上的教程了解一下吧。不过我有一句话,如果想在Python上有所建树,文档是早晚要读的。

爬虫相关的库和框架

编写爬虫其实用不到太多Python的特性和技巧。更多的是对Python几个库和对现成爬虫框架的使用,这些库包括:urlib、requests、re、bs4、json等等,常用的框架有:scrapy、pyspider、scrapy_redis、celery等等。我个人用的最多是一个我自己封装过的requests库、bs4和re。小的爬虫我一般不用框架,都是自己写,但如果写大型爬虫项目,框架还是有优势的。

如何熟悉这些库和框架呢?我的建议是以战养战,不断地写项目,不断地写总结。(是不是带了点敏捷开发的思想?)

项目从哪里找呢?这个很容易,搜索“Python实战”会出来一大堆,也可以去Github搜“Crawler”之类的关键词。当然我的博客上也有很多,是我学习的时候自己写的,原理、过程、代码全部都有。

一个很重要的点

这里有个很重要的点,也是我反复在说的一个点,就是爬虫的关键其实不在于代码编写,而是对网站反爬虫机制的逆向。这个过程又涉及到计算机网络、网络安全、前端知识等。其实还是挺复杂的,我只是恰好对这些领域都有所涉猎。因此上手写爬虫的时间很短。

举个简单的例子,如果要分析浏览器和服务器是怎么交互的,你首先要会抓包分析,交互用的是什么协议(http还是https),用的什么方法(GET还是POST),报文头带了那些参数?(TOKEN?uid?),只有弄清了这些,才能最大程度的用程序模拟人的访问行为,避免被网站封杀。

通常来说,报文中带的参数都是加密过的,加密的方式千变万化不计其数,这是反爬虫的核心。那么熟悉常见的加密算法显然是必须的。其次,这些加密一般是在js文件里完成的,如何从众多js文件中定位出相关的加密代码?至少你需要看得懂js吧。

实际情况会复杂一点,但是这几个方面的知识是必须的。如果不会的话,虽然不难,但是总要花时间学的。

然后我就这么不断地写,遇到了各种各样的问题这里就不写了。总之,半年后感觉有很大的提升,我就开始找工作了。

关于招聘网站

简历的话,内容自然是斟酌过的,格式我没有专门去弄,只是用markdown写了一份。(感觉程序员的话,也不在意格式的问题,何况markdown本来看起来就很简洁,还是挺不错的。)

在我上一次换工作时,我用的是智联、58和赶集。这回回来一看,又出现了拉钩、猎聘、51job、100offer和boss直聘。先说结论,技术向找工作用拉钩boss直聘。某段时间我投了很多,其中拉钩和boss直聘给我的反馈最好。最后,我的工作是自己投简历给HR找到的。

拉钩是我用下来体验最好的,而且我很多面试也来源于这个平台。而且拉钩app上的交流也很友好,问候语可以自己定义。这是我的首推。

比拉钩略次一点的是boss直聘。这个平台想做的概念就是让面试者直接和企业高管对话,然而私以为这并不合理,高管有高管自己的事,公司招人的事本来就应该是HR的责任,这样做岂不是本末倒置?除了这一点,boss直聘app的问候语功能也是我要吐槽的,不支持自定义;然后自带的几个问候模板用起来有很尴尬。而且如果双方不各自至少说一句话的话,是不能发送简历的。这就会导致一个场景:boss给我发了一句话:“小伙子对你很感兴趣,能不能聊聊?”,然后我说:“好的。“,注意此时才算我和boss建立的联系,我才能给boss发送我的建立,之后boss一看简历并不合适,就不了了之了。如果我对某个岗位感兴趣,为什么我不能直接投简历呢?而且有时候我明明不符合这个岗位,仍然有boss联系我,是不是系统自己推荐的?

剩下的几个网站我想吐槽的点就有点多了。首先这几个网站都有个共同的毛病,不能上传简历。因此我需要将我简历里的内容复制黏贴到网站提供的表单里面。这个过程是很耗时的,更糟的是,网站的表单并不是转为技术人员设计的,很多想填的东西找不到地方填;最糟糕的地方是,网站还会要求你填一些你不想,其实也可以不填的内容,比如说当前的薪水。

这几个网站里面又以猎聘最差,我记得猎聘的表单里要填户口、当前工作城市(默认我有工作?)、年薪等。它的工作年限是根据你填的项目经历计算出来的,而我第一份工作是2012年,中间读了两年硕士,但是自动生成的简历上,我的工作年限是五年以上。这导致我的备注里面直接写了“实际工作经验为3年,因网站问题无法正确填写。“。除了这些,猎聘顾名思义,上面基本都是猎头;猎头其实没问题,问题是也没给我推到什么合适的职位。其他几个网站或多或少也有类似的问题,总之就是不顺畅。

前程无忧和智联差不多,但是体验也不好,感觉很低端,在投了一份简历后,会弹出3-5个相关的岗位,你可以选择一键投递。这点我就很不理解,你这是广撒网的策略吗?智联招聘还有个对应的app叫智联卓聘,也全是猎头,而且发邮件发的很多,然而并没啥用。

综上所述,我觉得比较合理的几个找工作的途径应该是:找人内推、去公司官网自己投、拉钩或者boss直聘。

关于面试

因为我面试的时候人还是国外,时差导致我一天只能面一家公司。我大概投了2-3个礼拜的简历,差不多每天都会有一个面试。这些面试一面基本都过了,后来有一个公司进度比较快,连着3轮面试,然后给的待遇也不错,我就签了。这样后面几个没完成的招聘就没有继续下去,其实个人觉得拿到offer应该都没什么问题。

这里面还不包括一些不愿意视频面试的公司,要我回国后去上海当面面试。这点其实我也不太能理解,反正最后也都不了了之了。

关于爬虫的话,面试的问题其实都差不多。我罗列一下:

  • 自我介绍。我发现厉害的面试官一般都不会要你做自我介绍,而要你自我介绍的其实只是需要几分钟看看你的简历。至于面试官厉不厉害,其实看他问问题的角度就能看出来了。

  • 项目中遇到最难的地方?是怎么解决的?

  • 详细问你某个项目的过程。因此你需要很了解你自己做的项目。我被问到最多的是关于淘宝UA值的计算过程,似乎大家都对淘宝很感兴趣。

  • HTTP的三次握手和四次挥手。这个是个高频,我被问了好几次。

  • 进程、线程和协程。

  • 如何设计一个爬虫。

  • 常见的反爬机制有哪些,每种机制的应对方案。这个也是个高频。

  • 如何提高小组的代码质量?我答的是peer review。

  • 常见的去重策略和存储方案。

  • 用过哪些爬虫框架。

基本就这些,可以看到,我很少会被问到只和Python相关的问题(只有一次,问了list和tuple的区别)。但是去研究下Python,总没什么坏处。另外一些可能的加分项:

  • 技术博客,github

  • 英语

祝大家好运。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容