分享

我是如何通过Web爬虫找工作的?

 CDA数据分析师 2018-11-16
作者: Zhia Hwa Chong
编译: Mika
本文为 CDA 数据分析师原创作品,转载需授权
 
前言
当时我刚从大学毕业,需要找一份工作。那时我不太喜欢社交,因此我决定以我所知道的最佳方法来找工作,即开发一个应用程序,这篇文章就介绍了我是如何做到的。
 
Craigslist
我打算通过开发应用程序,帮我在Craigslist在找寻软件工程师的相关工作。
Craigslist是美国著名的大型免费分类广告网站,你可以在上面找到东西出售,服务信息,社区帖子等内容。
Craigslist
那时我从来没有开发过一个完成成熟的应用程序。我在大学里做的主要是学术项目,涉及到构建和解析二叉树,计算机图形和简单的语言处理模型。
换句话说,我是妥妥的小白。
Python是当下非常热门的新兴编程语言,我不太会Python,但我打算试着学一学。因此,我打算结合这两者,用Python开发一个小型的应用程序。
 
我是怎么做的
大学毕业后,我哥哥送了我一台明基笔记本电脑,我就用这太电脑进行开发。
这太电脑并不是具备最好的开发环境,我使用的是Python 2.4和Sublime文本的旧版本,但从零开始开发应用的过程确实令人振奋。
我不知道需要做些什么,我在进行不断地尝试,看会遇到哪些问题。我的第一个挑战就是如何轻松访问Craigslist的数据。
我查看Craigslist是否有公开的REST API,令我沮丧的是,并没有。但我找到了不错的替代品。
Craigslist有公开供个人使用的RSS feed。RSS feed是网站发送更新的计算机可读摘要。在这种情况下,RSS feed能让我获取发布的工作列表,这非常适合我的需求。
RSS feed大概是这样
接下来,我需要阅读这些RSS feed的方法。我不想自己手动浏览RSS feed,因为那很耗时,与一页页浏览Craigslist没有什么不同。
这时我开始意识到谷歌的作用。有一个说法是,软件工程师的大部分时间都用在谷歌搜索上,我认为这是有一定道理的。
经过谷歌搜索后,我在StackOverflow上找到了这篇有用的帖子,上面描述了如何搜索Craiglist 的RSS feed,这是Craigslist免费提供的一种过滤功能。我所要做的就是通过特定的参数对感兴趣的关键字进行查询。
我主要在找西雅图的软件相关的工作。因此,我通过特定的URL来查找西雅图包含关键字"software"的列表。
看,效果很不错。
西雅图的RSS feed中标题中包含"software"的内容
遇到的问题
我不认为我的方法能行得通。
首先,列表的数量有限。我的数据未包含西雅图的所有发布的职位,返回的结果仅是一部分。我希望尽可能扩大搜索,所以我需要获得所有可用的工作列表。
其次,我意识到RSS feed 不包含任何联系方式,这太可惜了。我能找到职位发布信息,但除非我手动过滤这些列表,否则我无法联系这些职位。
Craigslist回复链接的截图
继续迭代
经过第一次失败的尝试,我发现Craigslist有一个我可以进行删选的RSS feed,每个帖子都指向实际发布的链接。
如果我可以访问实际的帖子,那么也许我能从中删选出邮箱地址?这意味着我需要找到一种方法来从原始帖子中获取邮件地址。
再次,我在谷歌上搜索"解析网站的方法"。
结果我发现了一个很酷的Python小工具,叫做Beautiful Soup。它能让你解析整个DOM树,并帮助你了解网页的结构。
我的需求很简单:需要一个易于使用的工具,能让我从网页收集数据。
BeautifulSoup符合这两点,并不是花更多时间挑选工具,我选择了这个工具继续开始尝试。
这里也有类似的工具可供选择。
BeautifulSoup的主页
有了这个新工具,我的工作流程全搞定了。
我的工作流程
我准备进行下一个任务:从实际发布中爬取邮箱地址。
开源技术的好处在于,它们是免费的,而且性能强大。
BeautifulSoup能让你在网页上搜索特定的HTML标记。Craigslist以这样的方式构建其列表,以便轻松找到邮箱地址。
之后就简单了,我通过BeautifulSoup提供的内置功能,我就能简单地从Craigslist帖子获取邮箱地址。
 
整合起来
用了约小时,我就达到了预期目标。我开发了网络爬虫工具,能够收集西雅图100英里范围内软件工程师相关工作的邮箱地址,并回复邮件。
代码截图
我在原始脚本之上添加了些附加组件,让爬取更为轻松。例如,我将结果保存到CSV和HTML页面中,以便我能快速进行解析。
当然,当中还缺乏一些功能:
* 记录已发送邮件的功能
* 防止重复发生邮件
* 特殊情况,例如有些邮件需要验证码才能显示,防止机器人发送
* Craigslist不允许在其平台上进行爬取,如果我经常运行脚本则会被禁止。(我试图在各种VPN之间切换,试图"欺骗"Craigslist,但这不起作用),和
* 我仍然无法检索Craigslist上的所有帖子
最后这点让人郁闷,但我认为如果一个招聘贴发布了一段时间,可能发布者已经没有再招人了,这样也是可以接受的。
整个过程感觉像是俄罗斯方块。我知道最终目标是什么,而我真正的挑战是将正确的部分组合在一起,从而实现最终目标。每个部分都有不同的调整,但整个过程中我学到了很多新东西。
 
经验教训
这次经历让我大开眼界,我学到了更多互联网和Craigslist的工作原理,以及该如何运用各种不同的工具协同解决问题。
 
可改进的方面
当中有很多方面我能够进行改进:
* 我选择了一种不太熟悉的语言,这在开始有一个学习过程。不过还挺顺利,因为Python非常容易上手。我强烈建议编程初学者将Python作为第一选择。
* 过分依赖开源技术,开源软件也有自己的问题。我使用的一些库已不再处于活跃开发阶段,因此会遇到一些问题。例如,无法导入库,否则库会莫名其妙地崩溃。
* 自己解决一个项目可能很有趣,但也会带来很大的压力。你需要很大的动力才能做出成果。我的这个项目既快速又简单,但我确实花了几周进行改进。随着项目的进行,我会失去动力,找到工作后,我完全放弃了这个项目。
 
使用的资源和工具
* The Hitchhiker’s Guide to Python
一本很棒的学习Python的书。
* BeautifulSoup
我用来开发网络爬虫实用工具
* Web Scraping with Python
如何使用Python进行Web抓取工作的使用指南。
* Lean Startup
我从这本书中学习了如何快速进行原型设计。这里的很多想法适用于许多不同领域,也有助于我完成项目。
* Evernote 
我用Evernote写了这篇文章汇,强烈推荐。
* MacBook Pro
这是我目前使用的笔记本电脑,与之前的明基相比,它更容易使用,但两者都适用于一般的编程工作。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多