查看原文
其他

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

CDA 数据分析师 杰哥的IT之旅 2019-05-08

作者: 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免费提供的一种过滤功能。我所要做的就是通过特定的参数对感兴趣的关键字进行查询。


相关帖子:

https://stackoverflow.com/questions/10353021/is-there-a-developers-api-for-craigslist-org


我主要在找西雅图的软件相关工作。因此,我通过特定的URL来查找西雅图包含关键字"software"的列表。


https://seattle.craigslist.org/search/sss?format=rss&query=software


看,效果很不错。


西雅图的RSS feed中标题中包含"software"的内容


遇到的问题


我不认为我的方法能行得通。


首先,列表的数量有限。我的数据未包含西雅图的所有发布的职位,返回的结果仅是一部分。我希望尽可能扩大搜索,因此我需要获得所有可用的工作列表。


其次,我意识到RSS feed 不包含任何联系方式,这太可惜了。我能找到职位发布信息,但除非我手动过滤这些列表,否则我无法联系到这些职位。


Craigslist回复链接的截图


继续迭代


经过第一次失败的尝试,我发现Craigslist有我可以进行爬取的RSS feed,每个帖子都指向实际发布的链接。


如果我可以访问实际的帖子,那么也许我能从中爬到邮箱地址?这意味着我需要找到一种方法来从原始帖子中获取邮件地址。


再次,我在谷歌上搜索"解析网站的方法"。结果我发现了一个很酷的Python小工具,叫做Beautiful Soup。它能让你解析整个DOM树,并帮助你了解网页的结构。


我的需求很简单:需要一个易于使用的工具,能让我从网页收集数据。


BeautifulSoup符合这两点,这是我并不是花更多时间去挑选工具,而是选择了这个工具继续开始尝试。


这里也有类似的工具可供选择。

https://www.quora.com/What-are-some-good-Python-libraries-for-parsing-HTML-other-than-Beautiful-Soup


BeautifulSoup的主页


有了这个新工具,我的工作流程就搞定了。


我的工作流程


我准备进行下一个任务:从实际发布贴中爬取邮箱地址。


开源技术的好处在于,它们是免费的,而且性能强大。BeautifulSoup能让你在网页上搜索特定的HTML标记。Craigslist以这样的方式构建其列表,以便轻松找到邮箱地址。


之后就简单了,通过BeautifulSoup提供的内置功能,我就能简单地从Craigslist帖子获取邮箱地址。


整合起来


用了约1个小时,我就达到了预期目标。我开发了网络爬虫工具,这能够收集西雅图100英里范围内软件工程师相关工作的邮箱地址,并回复邮件。


代码截图


我在原始脚本之上添加了些附加组件,让爬取更为轻松。例如,我将结果保存到CSV和HTML页面中,以便我能快速进行解析。


当然还有一些不足:

  • 无法记录已发送的邮件

  • 无法防止重复发送邮件

  • 有些邮件为了防止机器人发送,需要验证码才能显示

  • Craigslist不允许在其平台上进行爬虫,如果我经常运行脚本则会被禁止。(我试图切换VPN,但不管用)

  • 仍然无法检索Craigslist上的所有帖子

最后这点让人郁闷,但我认为如果一篇招聘贴发布了一段时间,可能发布者已经没有再招人了,这样也是可以接受的。


整个过程感觉像是俄罗斯方块。我知道最终目标是什么,真正的挑战是将正确的部分组合在一起,从而实现最终目标。每一步都有不同的挑战,整个过程中我学到了很多新知识。


经验教训


这次经历让我大开眼界,我学到了更多互联网和Craigslist的工作原理,以及该如何运用各种不同的工具协同解决问题。


可改进的方面


当中有很多方面我能够进行改进:

  • 我选择了一种不太熟悉的语言,这需要一个学习过程。不过还挺顺利,因为Python非常容易上手。我强烈建议编程初学者将Python作为第一选择。

  • 过分依赖开源技术,开源软件也存在问题。我使用的一些库已不再处于活跃开发阶段,因此会遇到一些问题。例如无法导入库,库会莫名其妙地崩溃等。

  • 自己完成一个项目很有趣,但也有压力,你需要很大的动力才能做出成果。我的这个项目很快很简单,但我也花了几周进行改进。随着项目的进行,我逐渐失去动力,找到工作后,我完全放弃了这个项目。

使用的资源和工具


  • The Hitchhiker’s Guide to Python

一本很棒的学习Python的书。

  • BeautifulSoup

我用来开发网络爬虫实用工具

https://www.crummy.com/software/BeautifulSoup/

  • Web Scraping with Python

如何使用Python进行Web抓取的使用指南。

  • Lean Startup

我从这本书中学习了如何快速进行原型设计。这里的很多想法适用于许多不同领域,也有助于我完成项目。

  • Evernote 

我用Evernote写了这篇文章,强烈推荐。

  • MacBook Pro

这是我目前使用的笔记本电脑,与之前的明基相比,它更容易使用,但两者都适用于一般的编程工作。


更多精彩文章

百行Python代码 | 告诉你国庆假期哪些旅游景点爆满

用Python分析深圳程序员工资有多高?

让你不会装双系统也能用上双系统

用Python告诉你深圳房租有多高?

手把手教你如何快速搭建个人网站

程序员和 IT 人员不能错过的10个工具

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存