python爬虫工程师养成记
微信公众号:在敲代码啦
闲谈
很久之前就想写这个话题,但是一直都不敢写。最近脑袋一抽,感觉是时候着手了。爬虫的全称叫网络爬虫,也有人称之为网络机器人。它是一种按照一定规定,自动地抓取信息的程序,属于大数据技术的数据采集部分。自动化采集的能力提高了工作效率,于是该技术受到了电商、投资、房产、物流等行业的欢迎。下面我们介绍如何成为一个合格的python爬虫工程师。
正文
根据自身的经验我把爬虫分为三个阶段。
第一阶段初学者阶段
所需掌握的知识:
python语法、html+css基础,Ajax异步加载、抓包工具使用、解析数据工具(正则表达式、css、xpath)、数据库基本操作(关系型数据库、非关系型数据库)。
1、掌握python语法用于编写爬虫程序。
2、数据通常是以html或api的形式呈现所以需要掌握其基本原理。
3、抓包工具的使用能更高效的找到目标字段,有的抓包工具能直接呈现一些特殊的数据格式,如flash。
4、解析工具用于提取相关字段,清洗数据。
5、熟练数据库操作便于数据存库。
掌握以上知识点,一般的网站的数据采集都能够轻易的实现啦。
适合学习群体:
少量数据采集的工作者。需要有数据支持的写论文的研究生。爬虫爱好者。
python语法学习链接:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
三种抓包工具安装使用和区别对比:
http://www.365jz.com/article/24504
正则表达式语法:
http://www.runoob.com/regexp/regexp-syntax.html
css和xpath详解:
https://blog.csdn.net/lanhaixuanvv/article/details/78565877
python操作各数据库:
https://www.cnblogs.com/yz-test/p/9338409.html
第二阶段进阶阶段:
所需掌握知识:
http/https协议传输理论、多线程,多进程、手机app采集、其他协议(如websocket)。
1、掌握http/https协议传输理论,就能明白前端和后台的数据交互规律。理解cookie等机制的作用。
2、掌握多线程和多进程可以提高爬虫效率。
3、弄清计算机网络传输理论,同一网段下配置好手机代理就能够做到手机app采集,当然手机app采集的思路和网页端的一样。
4、除了http(s)协议以外有些网站或app会用到websocket进行数据交换,如一些菠菜网站。
掌握以上知识点,就可以新手上路找个工作了。有人可能会问为什么没有提到scrapy这样的爬虫框架,我的建议是先掌握相关库的运用。用最原始的代码写爬虫。爬虫是一种思维方式,当你熟悉这种思维方式后任何一种框架一学就会,甚至可以用任何一门语言去写爬虫,包括c语言。
http协议详解:
https://www.cnblogs.com/lzq198754/p/5780310.html
python多线程和多进程:
https://www.cnblogs.com/whatisfantasy/p/6440585.html
fiddler手机抓包:
https://my.oschina.net/jhao104/blog/605963
websocket爬虫案例:
https://segmentfault.com/a/1190000013149749
第三阶段高手阶段:
所需掌握知识:
反爬破解,验证码破解、高并发,设计集群爬虫系统...
1、反爬包括字体反爬、js加密反爬,apk内部加密反爬,验证码反爬。这块的技术决定你能否拿到数据。js加密可以通过分析js代码进行破解,apk内部加密可以采用脱壳或hook解决。字体反爬和验证码图像识别解决。
2、设计集群爬虫系统,需要有程序调度管理,系统资源管理的相关经验。
目前我能看到的高度就止到此处了,第三阶段的突破是比较艰难的也比较尴尬的。js的破解需要对js语法有个基本了解,得会浏览器的js调试,需要熟悉几种常见的加密算法。apk的脱壳会让你进入一个新的纪元,也就是Android逆向。图像识别也会打开新的世界,也就是机器学习。至于集群的设计,目前我并没有遇见过海量的数据采集项目所以不敢瞎断言。
总结
文章没有提到selenium,作为一个优秀的爬虫码农要学会拒绝selenium。能够用协议采集的坚决不用selenium ,没法用协议采集的想办法用协议。selenium固然好用但不是最纯正的爬虫。写到这里希望这篇文章能够让大家了解爬虫的进阶之路。当然如果有大佬和我的观点不一的欢迎私下交流。
你对爬虫的进阶之路是怎么看待的啦?如果你还有什么好的想法啦。欢迎你的留言。
微信公众号:在敲代码啦
