我用Python爬虫找到了Twitter的工作
我在Twitter做Ads Measurement广告测量相关的工作。这份工作,是用Python爬虫找到的。
故事是这样开始的
那是个马丁路德金假日的晚上,朋友们都出去浪了(咦,怎么听着这么耳熟?),而我正在肾上腺素爆发地趴在电脑前做一件我觉得酷毙了的事。
我12月刚毕业,需要一份工作。但我每天要花大量的时间精力在招聘搜索上,所以我决定加速我的工作搜索流程,毕竟在找工作这件事上,谁快谁就赢了。
从Craigslist开始
我想做一个程序,帮我收集并回复在Craigslist上招软件工程师的人。很多人也许只知道Craigslist能找房子和服务,但他们也许不清楚Craigslist上也能找工作吧!
先做一个最简单的原型
首先我要知道如何方便地获得Craigslist的数据。
我查了下Craigslist想看看他们是不是已经有了公开的REST API,但令我失望的是他们没有。
但是,我发现了另一个东西。
Craigslist有一个RSS feed是公开给个人使用的。一个RSS feed就是一个电脑可读的、对网站发出的所有更新的总结。在我的这个例子里,只要有人在Craigslist上挂出招聘帖,我就能通过RSS feed看到。这就是我想要的!
RSS feed就是长这样的:
接下来,我需要想个办法来读取这些RSS feeds。我可不想人工去一条一条读这么多RSS feeds,不然这和我直接浏览Craigslist有什么区别呢?
就在这时,我意识到了Google的强大。有一个笑话说的是,软件工程师的大多数时间是花在Google上找答案的......说实话我觉得这太真实了
在谷歌了一阵后,我在StackOverflow上发现了一个超有用的帖子,关于怎么来搜索Craigslist RRS feed。它本质就是Craigslist免费提供的一个筛选功能。我只要把我感兴趣的关键词加进特定的参数里就行了。
我当时主要在找西雅图的软件相关的工作,所以只要是关键词里包含“software”的西雅图招聘帖我都能爬到。下面就是我爬取的帖子的链接:
我喝过的最美味的汤(Beautiful Soup)
不过到目前为止,我的方法还是漏洞百出。
首先,帖子数量是有限的。我的数据并不包含所有西雅图正在招聘的工作。返回来的结果只是所有招聘帖中的一小部分。我需要知道所有在招聘的帖子。
第二,我意识到RRS feed爬取的结果只有原帖标题,不包括任何联系人信息,除非我手动地去点开帖子。
我是一个有很多技能和兴趣的人,但做重复的手动工作并不是我的爱好之一。我完全可以雇人来帮我做,但我当时还是刚刚毕业的穷学生,我不能在这个side project上乱花钱。
这看起来是个死结。不过这并不是结局。
持续迭代
怎么打开这个死结呢?
目前我们已知,Craigslist的RSS feed是可以用关键词来筛选帖子的,且RSS feed每一个帖子都有超链接可以连回原帖。
那,如果我可以找到原帖,也许我可以从帖子上爬取我要的电子邮件?
这意味着我需要找到一个办法来从原始帖子中获取电子邮箱。
又一次,我打开了我最爱的Google,搜索“解析一个网页的办法”。
我找到了一个很酷的Python工具包叫做Beautiful Soup。它妙极了,你可以用来解析网页并且帮你理解一个网页有着怎样的结构。
我的需求很简单:我需要一个方便使用的工具,并能让我们从网页上收集数据。Beautiful Soup可以完美地解决这两个需求。与其花更多的时间选出最好的工具,我决定就选择这个“美味的汤”继续前进了!
用了这个“美味的汤”,我的工作流程就确定了:
我现在准备好解决下一个任务了:从原帖中爬取email地址。
开源技术有一个很酷的地方就是,它们是免费的而且用起来很方便!就像在炎热的夏天有人送了你一根免费的冰淇淋。
Beautiful Soup让你可以在一个网页上搜索具体的HTML标签或者记号。Craigslist的网页结构让我很容易就能找到邮件地址,而邮件回复链接前后就是我可以用来提取邮箱信息的HTML标签。
从这一步起,一切就简单了。我靠着Beautiful Soup提供的内置功能,只要稍加简单的操作,我就能方便地从Craigslist的帖子里截取邮件地址。
把所有步骤拼在一起
我花了一个小时左右的时间,做出了我的第一个最简可行产品(MVP)——一个网页爬虫,让我可以收集并回复那些在西雅图100迈半径内寻找软件工程师的人。
我在原来的代码上又加了一些附加设备,来让整个流程更方便高效。比如,我把结果保存斤CSV以及HTML网页,以便我更快地解析它们。
当然也有很多不完善的地方,比如:
还无法记录我发过邮件的邮箱
防止给我已经联系过的人过度发邮件
Craigslist不允许在他们的平台上使用爬虫,所以我如果跑太频繁,我可能会被禁用
我仍然不能获取Craigslist上的所有帖子
不过最后一条不是太重要,因为如果一个帖子已经存在一段时间,那很有可能这个职位已经找到人了。
整个经历就像一个拼图游戏。我知道我的终极目标,我的挑战是把所有拼图拼到一起来达到这个终极目标。每一片拼图都带我走上了不同的旅程。过程很难,但让人很享受离答案越来越近的每一步。
Takeaways
这次的经历打开了我的眼界,我对Craigslist是如何工作的更加了解了,而且我用了不同的工具合力解决了一个问题,另外,我还有了一个很酷的故事可以和别人分享。
其实这很像当今科技是如何运作的。你找到一个需要解决的大问题,但你看不到任何马上可用的、明显的解决方案。于是你把这个大问题分解成一个一个小问题,然后一一攻破。
现在回想起来,如果笼统地描述我遇到的问题,那就是:我怎样可以用这个很酷互联网目录来快速触达有着某个特定兴趣的人群?
而这个问题,不仅仅能概括“自动化找工作”这个流程,还能概括很多其他商业问题。比如,怎么在Twitter上找到并触达某个特征的人群?而这,就是我后来找到的工作——在Twitter的Ads Measurement团队。
可以提高的地方
有很多领域是我可以提高的:
我选了一个我并不是非常熟悉的语言来开始,所以一开始有一个learning curve。但不是太糟糕,因为Python是很容易学会的语言。我非常推荐编程初学者来把Python当作第一门编程语言学习。
过度依赖开源科技。开源软件也有它自己的问题。比如,有很多我用的工具包已经很久没有更新过了,所以我刚开始遇到了一些问题。比如,我无法导入一个工具包,或者工具包因为一些很小的原因报错了。
自己搞定一个项目是很有趣的,但也可能造成很多压力。这个项目虽然比较简单的,但也花了我好几个周末来改善。之后我就越来越没有动力去改善我的项目了,在我找到工作后,我彻底放下了这个项目。
想要和作者一样,用Python爬虫敲开dream company大门吗?
2月MarTechApe的《Python爬虫课》就要上课啦:
以爬取Twitter、Reddit、微信、其他公共页面为例,学会如何用Python进行网页爬取,高速捕获网络世界的缤纷数据
直播课程 & 实操作业让你学会用Python进行社媒聆听,并学会对爬取到的海量社交媒体数据进行商业分析
6大案例实战,4个家庭作业,1个Final Project,课上课下同时用功,夯实巩固所学,扎实掌握知识
将课程所学、作业所学迁移到工作场景,当老板想要让你找一些External data的时候,你可以像变魔术一样把数据变出来,并作出完美分析。实用、与工作贴切是我们每一门数据分析工具课的必备特点
课程结束后,完成作业的同学将会获得课程结业证书!
课程原价$249美元 (人民币:1686元)(6-8小时课时直播交互课堂+录播回放)
前10人:$169美元 (人民币:1144元)
第11-20人:$199美元(人民币:1347元)
满20人后恢复课程原价
还等什么,赶紧联系小助手MissApe报名吧!
原文链接:https://medium.freecodecamp.org/how-i-built-a-web-crawler-to-automate-my-job-search-f825fb5af718
关于MarTechApe
MarTechApe是一个来自纽约、专注MarTech领域的知识分享|技能学习|求职服务的终身学习平台。我们提供最专业的Marketing Technology课程。