今天小编来分享一下爬虫工程师需要掌握的技能,一起来看看吧!
1、基本的编码基础(至少一门偏程语言)
这个对于任何编程工作来说都是必须的。基础的数据结构你得会吧。数据名字和值得对应(字典),对一些u进行处理(列表)等等。事实上,掌握的越牢固越好,爬虫并不是一个简单的工作,也并不比其他工作对编程语言的要求更高。熟悉你用的编程语言,熟悉相关的框架和库永远是百益无害。用Python,用ava写爬虫的也有,理论上讲任何语言都可以写爬虫的,不过最好选择一门。
2、任务队列
当爬虫任务很大的时候,写一个程序跑下来是不合适的;
·如果中间遇到惜误停掉,重头再来?这不科学;
·我怎么知道程序在哪里失败了?任务和任务之间不应该相互影凯响;
·如果我有两台机器怎么分工?
所以我们需要一种任务队列,它的作用是:讲计划抓取的网页都放到任务队列里面去。然后wokr从队列中拿出来一个一个执行,如果一个失败,记录一下,然后执行下一个。这样,wokr就可以一个接一个地执行下去。也增加了扩展性,几亿个任务放在队列里也没问题,有需要可以增加worker,就像多一双亏筷子吃饭一样。常用的任务队列有kafka,beanstalkd,celery等。
3、数据库
这个不用讲了,数据保存肯定要会数据库的。不过有时候一些小数据也可以保存成so或者csv等。我有时想抓一些图片就直接按照文件夹保存文件。
推荐使用NoSQL的数据库,比如nongodb,因为爬虫抓到的数据般是都字段-值得对应,有些字段有的网站有有的网站设有,mogo在这方面比较灵活,况且爬虫爬到的数据关系非常非常弱,很少会用到表与表的关系。
4.HTTP知识
HTTP知识是必备技能。因为要爬的是网页,所以必须要了解网页啊。
首先tml文档的解析方法要懂,比如子节点父节点,属性这些。我们看到的网页是五彩斑澜的,只不过是被浏览器散处理了而已,原始的网页是由很多标签组成的。处理最好使用html的解析器,如果自己用正则匹配的话坑会很多。我个人非常喜欢xpah,跨语言,表达比价好,但是也有缺点,正则、逻辑判断有点别扭。
HTTP协议要理解。HTTP协议本身是无状态的,那么“登录”是怎么实现的?这就要求去了解一下sessioni和cookies了。GET方法和POST方法的区别(事实上除了字面意思不一样没有任何区别)。
5、运维
这个话题要说的有很多,实际工作中运维和开发的时间嗟不多甚至更多一些。维护已经在工作的爬虫是一个繁重的工作。
随着工作时间增加,般我们都会学着让写出来的爬虫更好维护一些。比如爬虫的日志系统,数据量的统计等。将爬虫工程到师和运维分开也不太合理,因为如果一个爬虫不工作了,那原因可能是要抓的网页更新了结构,也有可能出现在系统上,也有可能是当初开发爬虫的时候没发现反扒策略,上线之后出问题了,也可能是对方网站发现了你是爬虫把你封杀了,所以一般来说开发爬虫要兼顾运维。
爬虫的运维可以从下面几个思路下手:
首先,从数据增量监控。定向爬虫(指的是只针对一个网站的爬虫)比较容易,一段时间之后对一些网站的数据增量会有一个大体的了解。经常看看这些数据的增加趋势是香是正常就可以了(Grafana)。非定向爬虫的数据增量不是很稳定,一般看机器的网络状况,网站的更新情况等(这方面我的经验不多)
然后看爬虫执行的成功情况。在上面提到了用任务队列控制爬虫工作,这样解耦可以带来很多好处,其中一个就是可以就是可以对一次爬虫执行进行日志。可以在每次爬虫任务执行的时候,将执行的时间、状态目标ul、异常等放入一个日志系统(比如kibana),然后通过一个可视4化的手段可以清晰地看到爬虫的失败率。
爬虫抛出的Exception。几乎所有的项目都会用到措误日志收集(Sentry),这里需要注意的一点是,忽略正常的异常(比如Connection描误,锁冲突等),否则的话你会被这些错误淹没。