我是如何从零开始建立一个网络爬虫来实现我的求职自动化的

起因

一个周五的午夜,我的朋友们在外面玩得很开心,而我仍在电脑前工作。

奇怪的是,我并没有感觉被忽视了。

我在做一些我认为真正有趣而且非常优秀的事情。

我刚从大学毕业,所以迫切地需要得到一份工作。当我离开西雅图的时候,我的背包里装满了大学课本和衣服。我可以在我的 2002 Honda Civic 后备箱中装上我的所有东西。

当时我不太喜欢社交,因此我决定用所知道的最好的方式来解决工作的问题。我试图创建一个应用程序来帮助我,这篇文章就是关于我是如何实现这一目标的。😃

开始使用 Craigslist

我在房间里,疯狂地开发软件,来帮我收集和回应那些在 Craigslist 上寻找软件工程师的人。Craigslist 本质上是互联网市场,在这里你可以找到出售的物品、服务、社区博客等。

在这里插入图片描述

Craigslist

当时,我从未构建过一个完全成熟的应用程序。我在大学里做的大部分事情都是一些学术项目,包括建立和解析二叉树、计算机图形学和语言处理模型。

我是个“小白”。

尽管如此,我还是了解到一个叫做 Python 的热门编程语言。我对 Python 知之甚少,但我还是不知疲倦地去学习关于它的知识。

因此我决定两两组合,用这种新的编程语言构建一个小的应用程序。

在这里插入图片描述

构建(工作)原型之旅

我有一台用过的笔记本,是我上大学时哥哥送给我的,我现在用它来进行开发。

从任何角度来说,这都不是最好的开发环境。我正在使用 Python 2.4 和 Sublime text 的一个旧版本,不过从头开始编写应用程序的过程确实是一种令人兴奋的体验。

我仍然不知道应该要做什么。我尝试了各式各样的事情来看看自己到底需要什么。我的第一个方法是找出我如何才能轻而易举地访问 Craigslist 数据。

我查找了 Craigslist 是否存在公开可用的 REST API。令我难过的是,并没有这些接口。

然而,我发现了另一个好东西

Craigslist 有一个 RSS 提要,仅供个人使用。RSS 提要本质上是一个可读的计算机摘要网站发送的更新。在这种情况下,RSS 提要允许我在发布新的任务列表时获取它们。这对于我的需要来说,实在是太完美了
在这里插入图片描述

RSS 提要的示例

接下来,我需要一种可以读取 RSS 提要的方法。我不想亲自手动浏览 RSS 概要,因为那将是一个时间接收器,这与浏览 Craigslist 没有任何区别。

这个时候,我开始意识到 Google 的力量。有一个笑话说软件工程师大部分时间在 Google 上找答案。我觉得这是有一定道理的。

我用 Google 搜素了一下,我在 StackOverflow 上找到了一篇有用的文章,其中描述了如何通过 Craiglist RSS 提要进行搜索。这是 Craigslist 免费提供的过滤功能。我所要做的就是传递一个我所感兴趣的具有特定关键字的查询参数。

我专注于在西雅图寻找与软件相关的工作。在这个前提下,我在西雅图输了一个特定的 URL,来查找包含关键字 “software” 的信息。

很好,起作用了。非常漂亮

在这里插入图片描述

例如,标题为 “software” 的西雅图 RSS 提要。

Beautiful soup 是我所使用的工具中,最好用的一个

令我不敢相信的是,我的方法起作用了。

首先,限制列举数量。我的数据没有包含西雅图所有可用职位的公告。返回的结果只是整个结果的一个子集。我希望尽可能地把范围扩大,所以我需要知道所有可用的职位清单。

其次,我意识到 RSS 提要 不包含任何联系信息。这确实有点让人失望。我可以找到这些清单,但是我无法联系这些发布者,除非我手动过滤这些清单。
在这里插入图片描述
Craigslist 回复链接的截图

我是一个有很多技能而且有很多兴趣的人,但是重复手动工作并不是其中之一。我本可以雇用别人帮我做这件事,但是我仅能用一美元的拉面勉强维持生活,所有这就意味着我不能在这个附带的项目上任意挥霍。

这是死胡同,但并不意味着结束

持续迭代

从第一次失败的尝试中,我了解到 Craigslist 有 RSS 提要,并且每个博客都有转到真实博客本身的链接。

很好,如果我可以访问真实的博客,那么也许我可以爬取它的电子邮箱地址?🧐 这意味着我需要找到一种方法从原始博客中获取电子邮件地址。

这一次,我依旧找到了我所信任的 Google,搜索 “ways to parse a website。”

在 Google 上,我发现了一个很酷的 Python 小功能,叫做 Beautiful Soup。本质上,它是一个很好工具,允许你解析整个 DOM 树,并帮助你理解网页的结构。

我的需求很简单:我需要一个易于使用的工具,可以让我从网页上收集数据。BeautifulSoup 检查了这两个盒子而不是花更多的时间挑选最好的工具,我选择了一个有用的工具,然后继续下去。这里是具有相似操作的可选列表 。

BeautifulSoup 的主页

小贴士:我发现一个很优秀的指南,它描述了如何使用 Python 和 BeautifulSoup 进行网页抓取。如果你有兴趣学习如何爬虫,那么我建议你阅读它。

有了这个新工具,我的工作流也就设置好了。

在这里插入图片描述

我的工作流

我现在已经准备好进行下一个任务了:从实际的博客中抓取电子邮件地址。

现在,关于开源技术,有件很酷的事情。他们是自由的而且工作很棒!这就像在炎炎夏日里免费吃冰淇一块新烤好的巧克力曲奇饼一样。

BeautifulSoup 允许你在网页上搜索特定的 HTML tag 或者 marker。而且 Craigslist 已经把它们处理的很好了,所以找到电子邮件地址轻而易举。tag 是类似于 “email-reply-link” 这样的东西,它基本上已经说明了电子邮件链接是可用的。

自此以后,一起都变得简单了。我依赖于 BeautifulSoup 提供的内置功能,只需使用一些简单的操作,我就可以很容易的从 Craigslist 博客中获取电子邮件地址。

进行内容组合

不到一小时,我就有了自己的第一个 MVP,我已经建立了一个网页爬虫,可以收集电子邮件地址,并回复西雅图半径 100 英里范围内寻找软件工程师的人。

在这里插入图片描述

代码截图

我在原始脚本的基础上添加了各种附加组件,来得到更好的效果。例如,我将结果保存在 CSV 和 HTML 页面中,以便可以更快速地解析它们。

当然还有许多其他值得注意的特点,例如:

  • 记录我发送电子邮件地址的能力
  • 疲劳规则可以防止向我已经接触过的人发送电子邮件的特殊情况
  • 特列,一些邮件在显示之前,需要验证码,以防止机器人操作(就像我这样的)
  • Craigslist 不允许爬虫在它们的网页上,所以如果我运行的太频繁,就会被禁止操作。(我试图在不同的 VPN 之间切换,来“欺骗” Craigslist,但是不起作用)。
  • 我仍然无法检索 Craigslist 上的所有帖子

最后一个是 kicker。但我认为如果一个帖子已经存在一段时间,那么发帖人可能无法在找到。这需要权衡,但我应该可以处理。

整个体验就像是 Tetris。我知道我的最终目标是什么,而我真正的挑战是把合适的部分组合在一起以实现特定的最终目标。每一个拼图都给我带来了不同的旅程。虽然这很有挑战性,但我却乐在其中,而且每一次我都会学到新的东西。

学到的教训

这是一次让人大开眼界的经验,我最终学习了一些关于互联网(和 Craigslist)如何运行的知识,各种不同的工具如何协同工作来解决一个问题,而且我得到了一个很酷的小故事,我可以和朋友分享这些。

从某种意义上说,这就像现在的技术是如何工作的。你发现了一个你需要解决的巨大而复杂的问题。而你看不到任何直接的、明显的解决方案。你把这个大而复杂的问题分解成多个不同的可管理的块,然后依次解决每一个块。

回顾过去,我的问题是:**我如何才能利用互联网上这个优秀的目录,迅速接触到有特定兴趣的人?**当时没有已知的产品或解决方案,所以我把它分解成多个部分:

  1. 查找平台上的所有列表
  2. 收集有关每个列表的联系信息
  3. 如果有联系信息,就发送一封邮件

这就是它的全部。技术只是作为达到目的手段。如果我能用 Excel 电子表格来帮我做,我会选择这样做。然而,我不是 Excel 大师,所以我采用了当时对我最有意义的方法。

有待改进的地方

我还有很多地方可以改进:

  • 我选择了一门并不熟悉的语言开始,所以一开始会存在学习曲线。还好并不算太糟糕,因为 Python 非常容易掌握。所以我强烈建议任何一个软件爱好者使用它作为第一门语言。
  • 过度依赖开源技术,开源软件自己也存在的一系列问题。 我使用的多个库不再处于积极的开发阶段,因此我很早就遇到了问题,我无法导入库,或者库因为一些看似无害的原因而失败。
  • 独自处理一个项目可能很有趣,但是同时带来的压力也不容小觑。你需要很大的动力才可以获取这些东西。这个项目快速而简单,但是我仍然花了几个周末来改进。随着项目的进行,我开始失去了动力,找到工作后,我完全放弃了这个项目。

这里我为大家准备了一份针对零基础的Python学习资料,有兴趣的同学可以看看哦。

「 Python经验分享 」

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家免费分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
9f49b566129f47b8a67243c1008edf79.png

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

8c4513c1a906b72cbf93031e6781512b.png

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

afc935d834c5452090670f48eda180e0.png

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

252731a671c1fb70aad5355a2c5eeff0.png

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

6c361282296f86381401c05e862fe4e9.png

d2d978bb523c810abca3abe69e09bc1a.png

这份完整版的Python全套学习资料已经上传CSDN
朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值