多的不再啰嗦,前辈们已经搭好框架,我们只需要站在巨人肩膀上继续前行,继续深造,不然我们会被时代淘汰的。
先直接搞几个大牛的技术文章来过过瘾:
爬虫工程师
经纬纵横-如何成为一名爬虫工程师?(顺带提供工作机会)
月薪25K的爬虫工程师对爬虫的流程做了一个非常全面的总结!
最全Python爬虫总结
好,阅读完上面大牛的文章之后,接下来我们开始进入分析阶段:
为什么说Java爬虫工程师一定要懂Java呢?字面上就能看出来了。
可能会有同学说我写爬虫的话,从目前主流的写法上我应该选择哪一种语言来实现呢?不用着急,老司机已经为我们解释了一些:
PHP, Python, Node.js 哪个比较适合写爬虫?
爬虫 第三篇 (语言选择python还是java还是其他)
那么从上面来看的话,简单的爬虫用nodejs、python、Java都可以。但是业务逻辑多的爬虫呢,就只能在Java于python里面选择了,其实这两个语言呢,都是面向对象的语言,选哪一个都差不多,但是根据目前成熟度来看的话还是用Java来控制好一点。
那么Java的话,我们需要了解里面的什么内容呢?
1.基本语法 2.与web结合的语法 3.与数据库结合的语法
4.正则表达式 5.maven/gradle与至少一种框架
这么来看的话岂不是已经走的是全栈的路线了?没错,就是你想的那样,因为这本来就是需要全栈技术来实现的。工资也是相对高的。
JavaScript这个地方需要讲点什么呢?因为目前主流的爬虫都是web爬虫,所以我们也是一定要了解前端技术,因为你看到的是用户层展示的数据,这个是属于前端的。如果你抓的是后台的数据,那么你就得攻破对方的权限来连接到数据库,这个时候的爬虫呢就不是web爬虫了,而是整个数据库与整个项目的复制。当然后者是违法的,这里就不补充后者的应用了。
那么JavaScript我们需要了解些什么呢?
1.ECMAScript 2.Jquery 3.Ajax
4.webDriver Script语法 5.nodejs Script语法
简单列举了一些内容,然后我们学习的时候应该把重点放在DOM定位上,因为我们主要看的是数据交互的地方,只需要定位到某个想要定位的标签就好,这样才能根据正则、Jsoup来抽取我们想要的数据。当然,如果你能够把定位DOM这个工作做得非常熟练了,那么你在前后端数据对接接口的时候也是非常快速的,完全可以应聘初级的前端工程师了。
关于web我想说点什么呢,就是前端技术也是需要我们去掌握的。因为前端技术变革很快,更新很快,从之前的bootstrap,到现在的react,angularjs,vue等火热的前沿技术。如果你不能够快速判断出网站使用的是什么结构式开发的话,那么你破解起来也是非常耗时的,很有可能会搞了半天无功而返。
ok,进入我们的技术列表:
1.css语法 2.html布局与使用 3.快速识别前端框架
4.与后端数据交互的语法 5.与数据库交互的语法
在前端页面徘徊查找破解方法的时候,很多网站都会把js文件放在另外的位置,这样在调用js方法的时候比较安全。但是这并不能阻止我们的脚步,我这里想强调的调用完js之后的页面效果,与网页源代码的效果是不一样的,第二一个就是”_blank”的破解,有些网站在开发工具上删掉”_blank”之后仍然会跳到另外一标签栏显示,但是这并不妨碍我们的工作。
这里我先打一个重点号。身为一个写爬虫的人,如果我们连这个都不知道,都了解不深,那么我只能说你马上就要失业了。现在人工智能上有很多自动化的技术马上就可以使我们集体失业了,因此我们不应该被逼上绝路,而是谋求更高技术的发展,这也是为什么我会写文章的缘由吧,希望有更多志向、意向的同学在我们这些前人的经验分享基础上,让爬虫这种黑科技达到更高的水平,而不是被人工智能取代,人工智能也是有缺陷的,网上各种爬取工具也是很有限制的,一旦爬取源方把你所有的IP以及登录信息记录到黑名单上,你再怎么爬都白搭了,耗时又耗力。在数据部门工作就要讲究效率,只有有效率,才能在数据爆炸的时代突出。
因此呢,我们要拥抱人工智能,让人工智能来为我们服务,就像OCR识别技术一样,来方便我们通行。OK,接下来讲主要部分。
1.http里面包含什么呢,这里就先简单列几点吧:http协议,tcp、udp、ftp传输,网络七层,图片、视频、语言传输原理等。在这里面呢,我们还需要深入了解的是cookie与session机制,这个呢就是黑客经常要catch的点。如果因为业务需求非要获取某源的信息时,那么不妨走一下物理层的数据交互。
2.抓包技术:这个是在整个爬虫里面最最最核心的地方了,如果这个你不会,那么你根本就不配做爬虫工程师。我这里就只介绍web爬虫抓包。OK,抓的是什么呢,http request;http response;post param。这里我要列一下黑科技了,我们也不怕安全工程师来封杀软件使用,因为总会有人站出来共享的,毕竟技术已经宣传出去了。我们需要掌握的东西是什么呢,简单列几个:Anyproxy,Fiddler,Burpsuite,postman,Linux命令curl,再就是最常用的各浏览器自带的开发者工具了。
ok,为什么我这里会列举渗透攻击所用的工具呢?因为可能在未来我们会把爬虫做得越来越大,并且会应用到分布式,这样的话就无异于DDOS攻击了,所以我们也需要参考攻击端所用的工具,并通过一定的技术手段来伪装请求。
说一下数据库技术,因为业务线的不同,将数据存储的位置也会不同,这里主要讲两种类型的数据库:关系型数据库MySQL/Oracle和非关系型数据库MongoDB。
1.SQL语法 2.MongoDB语法 3.JDBC等连接技术的语法
4.结合框架之后的交互语法
对于初级来说,简单的增删改查会就好,这个是我们存放数据的时候必须要掌握的。存放数据的表我们也要相应的加上业务需要的字段索引,这样方便之后的增量维护。
为什么会谈到这个呢?因为很多数据公司都是不差钱的,基本都是用Mac开发,那么Mac的话就可以是Mac与Windows双系统,然后我们需要应用这种计算机开发本身自带的命令来实现某些功能。当然,如果你想要建立一套分布式爬虫的话也是必须要会这个语法的,毕竟在云端的服务器是没有图形界面的。
ok,下面来简单梳理一下需要的内容:
1.ssh 2.vim/edit 3.基本语法
4.kill 5.nohup 6.tail 7.scp 8.ps
ssh呢是远程连接用的,vim与edit来编辑文本,kill主要是杀掉需要停止的爬虫进程,nohup主要是将jar程序输出到指定的日志文件上的命令,tail来查看日志,scp是远程传输,ps主要是查看进程
到这里呢,假设我们已经写好了一个爬虫,然后准备执行的时候,考虑到session时效性,因此我们可能会需要写一个简单脚本来监控这个进程,多少时间后kill掉,然后多少时间后重启,这就是一个简单的定时任务,当然后期我们会应用框架来实现这个功能的。
那这里列举就简单了:
1.bash shell语法
2.python语法
如果这里你写一个jar脚本的话是比他们两个占更多内存的,因为后期还要考虑更多的不确定性因素,所以这个脚本没必要用jar来实现。
嗯,我想绝大多数开发都会用到这几个技术吧,毕竟这是一个既常用又强大的技术。xpath与Jsoup是用来解析html标签的,xpath还能更方便解析标签式文本,所以看个人熟练哪个就用哪个吧,当然并不是全部的网站只要精通里面一个就能解析下来的,所以还是两个都接触,没有坏处。正则就不用说了,一定要会。那么其他辅助类我这里指的是什么呢?像xxx-parser等针对数据处理诞生的辅助类,我们不妨多了解一下,说不定会有特别适合自己业务的。
简单介绍一下里面需要掌握的技术:
1.xpath定位 2.Jsoup定位 3.webDriver里面的xpath定位
4.正则里面的前中后匹配语法 5.数据清洗、数据解构相关的辅助类
如果这种文本处理的技术你掌握了,那么我想后端或者是数据库维护的时候应该都会需要你的支持的,毕竟它们的用处很多。
这相当于爬虫来爬取页面的三种选择方式吧,可以根据业务的不同,优先级的不同来选择。也是希望全部掌握吧。
简单介绍一下需要掌握的东西:
1.httpClient里面的get/post连接,response状态码及entity,SSL协议应用方式
2.selenium自动化语法与Firefox/Phantomjs结合的语法
3.nodejs基本语法,js请求链接与查看返回数据包的语法
httpClient底层是由socket实现的,这种方式抓取效率会很快,当然如果你抓的网站反爬策略不严重以及服务器较好的话也可以试试nodejs。selenium这种方式因为要渲染的原因调用起来会很慢,除非是爬的数据质量很高的网站,没有更好的优化方式了,就用这个。
为什么要强调渗透工具的使用呢,因为现在的爬虫并不是像之前那么简单了,因为反爬策略也是渐渐成熟起来,所以我们需要更强大的技术来支持下去。
我这里就随便列几个工具吧,因为并不是每一个黑客师傅都会教人的:
1.nmap 2.sqlmap 3.OWASP系列
4.metasploit 5.xss扫描与arp工具
涉及到挖漏洞技术的时候,一般人都是先选择不公开,等待时机成熟了,才会发布出来,总之就是先利益再公益。当然我们不能拿这个来做坏事,因为我们只是在爬取上应用到了这方面的技术,毕竟是对面反爬策略惹的祸嘛,所以拿来简单利用下即可。
ok,说了这么多,终于到最后的总结了。个人觉得初级要是掌握了上面我列举的内容的话,月薪10k肯定算是少的了。所以还是多多鼓励年轻人要敢于去尝试新技术,这样技术火花的碰撞才能更猛烈,然后我们才不至于失业,而且会有一个更高的突破—站在人工智能上的突破,毕竟我们是发明人工智能来更好的为我们服务,节约我们的时间来研究更多事情的。之后有时间的话我会继续更新新的文章的。