前言:本文无源码,来聊聊爬虫工程师终将逝去的青春

此刻的我正坐在工位上,看着面前的某网站爬虫代码,陷入了回忆。

 

1、缘起

我是零工作经验,入职一家公司以来接到的第一个项目,从零开始写一个爬虫。

既不是在爬虫系统上添加功能,也不是给祖传代码填坑,而是全新开发爬虫项目。

“你写一下XX网的爬虫,主要是爬一下个人资料,你大概需要多久?”
“4、5天吧”,曾经用2、3天写了知乎爬虫的我给自己留了宽裕的时间用来摸鱼。
“那好,我给你一个星期时间。”
“好的”

我给了自己4、5天时间。

然后,就走上了这条不归路……

 

2、一个爬(fei)虫(pin)的诞生

基于程序员必备的搜索技能,我迅速的在github上找到了一个相似的爬虫代码。

修修改改,我只花费了2天时间就写好了爬虫,大概用到了,post请求呀、ajax异步加载呀、正则匹配呀、json呀什么的,甚至还优化了原作者的代码。

同时,距离作者写出这个代码,已经过去很久了,网站一些信息的获取规则已经不同了。由于网站特别的策略,我学会了识别网页源码伪装通过二次传递值来查找目标信息。(首先找到传递值,再通过传递值匹配目标信息)

于是,很快,我的爬虫欢乐地运行了起来。

并且,满(nei)怀(liu)热(man)情(mian)地花了1个多月时间,为自己的爬虫补坑(手动)。

 

3、第一个障碍

爬虫跑起来之后,由于单个账号请求次数过多,出现了验证码,会往注册的邮箱里发一条包含验证码的邮件,填上就可以重新登入。

我始终没有通过requests越过这道坎,最终我选择了用selenium来登录网站并提交验证码,并将登录成功后的cookies信息传递给获取信息的函数块中。

这时,我学会了用 imaplib 模块登录邮箱获取验证码。

 

4、部署服务器

解决了验证码登录的问题,程序又一次跑了起来,此时就需要部署到服务器上了。

selenium的浏览器chrome不利于在服务器上运行,于是我学会了将selenium结合无头浏览器phantomjs使用。

服务器是新开的,环境还需要配置,于是我又学会了配置服务器的基本操作。

 

5、功能分离

当单个账号单日发送的请求过多达到阀值时,网站毫不留情地封掉了账号,没有冷却时间,永久封禁。

同事为我提供了批量的账号,而我 跑崩了一个又一个。

于是我又改变了使用账号的策略,多个账号,切换IP,轮流爬,每个爬几下就换。

此时不停地用selenium登录账号已经变成肥肠影响爬虫速度的一个事情了,于是我开始分割代码。

一个代码用来为账号更新cookie,一个代码直接取cookie,而可用的cookie信息,我存在了mysql中(这或许就是菜鸡吧)。。。。。

而这样的功能分离,它有一个高级的名字,生产者-消费者模型。

 

6、多线程

此时爬虫,已经可以无障碍的运行了,挡在面前的问题是爬虫的速度,我开启了多线程,这时问题又来了,url的重复提取问题,单例运行时不需要考虑的问题,但当开启了多线程、多进程等并发操作时,url的去重就变得必要了。

再一次功能分离,将需要提取的url,放入redis库中,爬虫程序中直接使用pop函数获取url,取出即删除,不会出现重复提取的情况,redis是一个在缓存方面非常优秀的数据库。

此时的代码为了多线程的配合,将所有的与爬虫无关的,获取cookies,存取数据信息,都分离了出来,所有的通信都只存在于redis之间,这样爬虫的速度就得到了大幅度的提升。

 

7、最后

有人会想,这不就是一个项目的流程吗?

为什么这篇文章的名字是爬虫工程师劝退文呢?

因为我的账号依然被禁了。。。。。

于是我接手了同事的注册账号的项目。。。。。

砸了N多经费去买代理ip,买收验证码的手机号。。。。。

折腾了N久终于准备开心地把注册机代码也部署到服务器上形成程序闭环。。。。。







发现网站改了注册策略。。。。。。。

 

总结语:

get到技能了嘛?爬虫工程师说要掌握的不多也不多,但是说很少的话也不少了!

你看,学了这么多知识,依然过不好这爬虫工程师的一生,

大家还是不要私信问我需要哪些技能才能做爬虫工程师了!

赶紧转行跑路吧!敲黑板!划重点!

 

最后,为减少让爬虫工程浪费时间,推荐米扑代理ip,私密可用率99%以上

爬友们,祝好~ 

 

 

原文转自爬虫工程师劝退文 (微信公众号)

 

参考推荐

Python框架、库资源大全

13个最受欢迎的Python开源框架

开源爬虫软件汇总

网络爬虫工程师被企业劝退的经历

Python金融股票爬虫实战源码大全

常见的量化策略框架,学习量化炒股