前言:本文无源码,来聊聊爬虫工程师终将逝去的青春mysql
此刻的我正坐在工位上,看着面前的某网站爬虫代码,陷入了回忆。git
“你写一下XX网的爬虫,主要是爬一下我的资料,你大概须要多久?” “四、5天吧”,曾经用二、3天写了知乎爬虫的我给本身留了宽裕的时间用来摸鱼。 “那好,我给你一个星期时间。” “好的”程序员
这是零工做经验的我入职这家公司以来接到的第一个项目,从零开始写一个爬虫。github
既不是在爬虫系统上添加功能,也不是给祖传代码填坑。ajax
我给了本身四、5天时间。redis
而后就走上了这条不归路……sql
基于程序员必备的搜索技能,我迅速的在github上找到了一个类似的爬虫代码。chrome
修修改改,我只花费了2天时间就写好了爬虫,post请求呀、ajax异步加载呀、正则匹配呀、json呀什么的,甚至还优化了原做者的代码。数据库
同时,距离做者写出这个代码,已通过去好久了,网站一些信息的获取规则已经不一样了。因为网站特别的策略,我学会了识别网页源码假装经过二次传递值来查找目标信息。(首先找到传递值,再经过传递值匹配目标信息)json
因而,很快,个人爬虫欢乐地运行了起来。
而且,满(nei)怀(liu)热(man)情(mian)地花了1个多月时间为本身的爬虫补坑(手动再见。
爬虫跑起来以后,因为单个帐号请求次数过多,出现了验证码,会往注册的邮箱里发一条包含验证码的邮件,填上就能够从新登入。
我始终没有经过requests越过这道坎,最终我选择了用selenium来登陆网站并提交验证码,并将登陆成功后的cookies信息传递给获取信息的函数块中。
这时,我学会了用imaplib模块登陆邮箱获取验证码。
解决了验证码登陆的问题,程序又一次跑了起来,此时就须要部署到服务器上了。
selenium的浏览器chrome不利于在服务器上运行,因而我学会了将selenium结合无头浏览器phantomjs使用。
服务器是新开的,环境还须要配置,因而我又学会了配置服务器的基本操做。
当单个帐号单日发送的请求过多达到阀值时,网站绝不留情地封掉了帐号,没有冷却时间,永久封禁。
同事为我提供了批量的帐号,而我 跑崩了一个又一个。
因而我又改变了使用帐号的策略,多个帐号,轮流爬,每一个爬几下就换。
此时不停地用selenium登陆帐号已经变成肥肠影响爬虫速度的一个事情了,因而我开始分割代码。
一个代码用来为帐号更新cookie,一个代码直接取cookie,而可用的cookie信息,我存在了mysql中(这或许就是菜鸡吧)。。。。。
而这样的功能分离,它有一个高级的名字,生产者-消费者模型。
此时爬虫,已经能够无障碍的运行了,挡在面前的问题是爬虫的速度,我开启了多线程,这时问题又来了,url的重复提取问题,单例运行时不须要考虑的问题,但当开启了多线程、多进程等并发操做时,url的去重就变得必要了。
再一次功能分离,将须要提取的url,放入redis库中,爬虫程序中直接使用pop函数获取url,取出即删除,不会出现重复提取的状况,redis是一个在缓存方面很是优秀的数据库。
此时的代码为了多线程的配合,将全部的与爬虫无关的,获取cookies,存取数据信息,都分离了出来,全部的通讯都只存在于redis之间。
有人会想,这不就是一个项目的流程吗?
为何这篇文章的名字是爬虫工程师劝退文呢?
由于个人帐号依然被禁了。。。。。
因而我接手了同事的注册帐号的项目。。。。。
砸了N多经费去买ip,买收验证码的手机号。。。。。
折腾了N久终于准备开心地把注册机代码也部署到服务器上造成程序闭环。。。。。
。
。
。
。
。
发现网站改了注册策略。。。。。。。
总结语:你看,学了这么多知识,依然过很差这爬虫工程师的一辈子,你们仍是不要私信问我须要哪些技能才能作爬虫工程师了!赶忙转行跑路吧!(敲黑板!划重点!)