总结 | 反思 | 分享
学习Python爬虫2个月了,一路惊喜一路bug,苦辣酸甜不言中。今天正好周末,做一下阶段性总结。
怎么是总结(2)?因为(1)在这里呀:自学爬虫一月总结
(还有看到这个标题大家也别太疑惑,只是参加了彭老师的征文大赛顺便加上了而已233)
以下内容将围绕这张图展开:
一、学习收获
数据说话
从今年3月初开始,0基础自学。中间也是断断续续,因为还要上课。总共做了主要项目13个,写了博客16篇。目前在scrapy的进阶阶段,准备学习分布式。
4月11日开通了知乎专栏,现在刚好1个月。
到5月14日 15:50为止,各种数据
简书文集:文章16,文集订阅82,浏览5.8k,评论130,喜欢123,赞赏10
知乎专栏:文章16,专栏关注934,收藏2.0K,评论307,赞同659,赞赏4
github项目:star25,fork 9,watch 3
其它:收到不少盆友的反馈,有问如何学习爬虫的,有在评论区支持鼓励的,有大神提意见给建议的,有私信我要坚持写下去的,值乎问问题的,直接过来问联系方式的233,甚至有专栏、公众号求转载的,还有半夜两点过来文章下面赞赏支持的。。。
我一个萌新,真的是受宠若惊啊!
收到这么多反馈和鼓励,出乎意料,超级超级感动~
特此谢谢每一位关注、支持我的朋友们,宽容我的烂文、烂代码还愿意提供宝贵建议的大神们,鞠躬,笔芯,么么哒 \^O^/~
我会继续保证文章的质量,同时努力学习出更高阶、更系统的内容。
还有这段时间,不仅学到了一些python爬虫知识,对python编程开始有了接触和了解,随着学习也认识了自己的不足。学习过程中认识了很多热爱python、热爱数据科学的盆友和大神,从他们身上也学到很多东西。
二、一些分享
其实本来想写"经验分享",可是想想编程界卧虎藏龙,而且自己目前学的连冰山一角都算不上,这样岂不班门弄斧(其实我也不造,当初哪来的耿直勇气开知乎专栏@_@)
坑已然挖好不好回头,还是谈谈我的看法吧,也算是回答之前一些盆友们的问题~ (一些观点不成熟,大神们笑笑就好~)
1)如何学习python爬虫
2)如何做好一个项目
3)如何写好一篇博客
1)学习python爬虫
1、学习路线及资料推荐
这个问题有一些同学来问过,我在自学爬虫一月总结提过一些但不是很全,现在进行一下补充。
(当然以下仅是我个人的看法,每个人学习曲线、学习方式都不一样,做个参考就好)
首先建议先对爬虫做个大概了解,推荐董大的Live:爬虫从入门到进阶
然后就是Python基础学习,书籍可以《简明python教程》或者《learn python the hard way》等,博客推荐廖雪峰老师的Python3教程 。单单为了学习爬虫,可以先跳过web开发部分。
爬虫基础urllib,re,requests,BeautifulSoup,Xpath等等,崔庆才大神的博客:Python爬虫学习系列教程,单单看看这些基础知识肯定枯燥,结合例子最好不过啦,于是可以循序渐进的看看上面例子。中间会需要一些http知识,可以看《图解http》。
爬完文字爬图片,爬完静态爬动态。然后遇到Ajax网页就需要抓包,这个就讲的不错:爬虫从入门到精通——网页的下载,顺带提一下这个专栏一些基础知识很详细。
爬到拉勾、豆瓣了,会独立(对是独立)分析网页抓包,能够绕过一些简单的反爬,进行文件、excel、数据库等简单存储,这时候就差不多爬虫入门了。
然后可以学习爬虫框架如scrapy、pyspider等。scrapy基础推荐专栏木制robot的爬虫世界,很详细,而且值得一提作者自学成功转行了,比较遗憾的是只介绍了几篇。(目前我也在看scrapy,想汇总做一个较系统的系列。不过惭愧,学习速度还是太慢了)
进阶篇,最常见多进程、多线程,selenium,PhantomJS,网上教程很散需要自己挖掘,还是回归静谧的博客。
其实进阶的话还远不止这些,在知乎上看到几个思路:Python爬虫进阶?-知乎,这个问题xlzd、王家葳这两个大神的答案很精彩。
然后董大(董伟明)在 python分享中初级爬虫教程泛滥是否有其语法特征和生态环境的锅?- 知乎 中提供的思路也非常不错。
应该了解到要做的东西其实还很多,代理IP池、Cookies池、验证码、分布式、缓存、调度、反反爬等等,需要自己慢慢摸索了。
推荐几个大神的博客:
简书:蜗牛仔、treelake、qiye、comboo(这家伙已经在分析框架的源码了)
知乎专栏:一起学习python网络爬虫、撸代码,学知识、数据冰山、学习编程
笑虎大神的专栏"撸代码、学知识",文章质量很高,且不限于Python爬虫,里面甚至有一些Flask开发的介绍等等。
"数据冰山"人气旺,偏重于数据分析挖掘,不过可以扩大视野不是,爬虫本来就是用来分析的嘛~~
还有"学习编程"是“数据帝”路人甲路人甲的专栏(大家都应该不陌生),除了学习借鉴数据分析的思维方式,里面偶尔会有一些学习编程的资料推荐,不能太棒哦。
此外还可以去github上找,很多不说了,提一个有趣的反反爬仓库:Anti-Anti-Spider,应该很多人都知道。
之后还可以分析框架源码,开发自己的爬虫框架,甚至写可视化的爬虫。
(当然这时你很可能已经不满足于爬虫了,学学web开发就挺好,搞搞数据分析机器学习也不错)
当你已经"爬过万水千山",浏览器能get基本也能爬到,并且有能力开发自己的爬虫框架,这时你就已经达到一种境界了,所谓"看山还是山,看水还是水"。
更高级的还有搜索引擎,好远啊不扯了>_<
目前暂时就是这些,想到再补充,也欢迎大家评论区提建议~
2、我的学习方式
之前的总结说过了:自学爬虫一月总结
总的来说:大体需求、项目驱动、知识点复查、博客记录、定时总结
3、其它,比如是否需要培训
一句话:于心而言真的不需要,看个人,小心智商税
2 )做好一个项目
python爬虫学习对实战的要求很强,除了get基础技能,反反爬经验也是必需在实战中积累的。
不过项目在精而不在多,入门后你会发现许多东西都是如出一辙,许多网站通过抓包调用API就可实现,这时候真的没有必要再迷恋在抓取简单网页的成就感中了(这是不是爬虫初级教程泛滥的原因之一233),你需要赶紧的进阶,进阶,进阶!!!
我觉得关键在于:如何设计学习路线,通过较少的项目,循序渐进地进行爬虫学习。
不过做好一个项目也不是那么简单的事情,细节的东西太多了,首先安装都能成为一个坑。不信你看,这是我安装mysql遭遇的:
还好宝宝心理素质比较强,那如何做好一个项目呢,在明确好学习路线后,有几个点
1、基础知识
基础知识一般官网资料就可以了。有时觉得一些博客更浅简易懂,而且很多东西是经过作者思考过归纳汇总的,可以借鉴。
2、分析源码和网站结构、制定抓取策略
其实我很少看审查元素,一般是直接分析源码。这么做是因为,我们的浏览器访问网页时“看到”的东西,其实是源码。如果你是初学,不要怕密集恐惧啦,养成习惯后渐渐会变得很有意思哦。
比如我在爬pexels图片网时,发现其图片接口就隐藏在源码中;分析豆瓣发现其分PC端和移动端,两者网页不太一样,而且分析发现不登陆的话,某些数据是无法爬下来的;分析拉勾时发现了它的页面变动的规律,一个障眼法22333 。
还有网站结构,主要是找出url规律和网站反爬策略,对于有一点前端经验的盆友来说,简直不是事儿呀。
然后就是指定爬取策略了,可以根据html结构选择最合适、高效的数据提取方式,是re,BeautifulSoup,还是Xpath?
3、先自己做,有自己的想法
我的话最初两个例子是照着崔庆才大神的博客来的,后面就全自己找了。个人觉得在大概摸清爬虫程序的套路后(一两个例子),遇到一个项目,自己想思路,自己写程序,实在不行再借鉴别人的方法。
纸上得来终觉浅,绝知此事要躬行,别人的收获毕竟也只是别人的,不亲自探索,还是很难真正学到东西。
4、它山之石,可以攻玉
有时候我们借鉴别人一些好的想法,将其运用于我们的项目中,然后可以事半功倍。(感叹互联网的开源精神、开放共享环境就是棒呀) 但并不意味着将复制粘贴就完了,至少得理解一下原理和思路吧,加上自己的想法那更好啦~
我的博客前两篇,虽然是跟着崔庆才大神的博客学习的,但是真正爬取的时候并不是一步步照搬,而是自己适当改了下; 在Scrapy之断点续爬(存入MySQL)中,断点续爬想法来自知乎,但发现实例很少啊,于是自己写程序实践了它,参考了大神的博客的一小段,但觉得累赘根据情况改了一下,然后又查资料发现了另一种python中操作mysql的方法。
你看,大概就这样,有点github上fork思想的意味?
5、寻求最佳方案
这里就不赘述了。寻求解决问题新途径,有没有别的方式呢,怎样实现最简单有效美好?不断改bug,不断提需求,再改,直到满意为止。(记得当初做那个pixabay图片下载器也改了好久)
6、提高搜商
何为“搜商”,就是搜索定位有效资源的能力。简直程序员必备技能啊。学习过程中各种bug,遇到问题首先自己解决最靠谱。
目前网络这么发达,百度、知乎、谷歌、知乎、简书、stackoverflow、CSDN等等,一般的小坎还是容易过得去的。
逛逛别人的博客,或者浏览某个社区,偶尔还会发现一些好的知识点和思路呢。(之前在stackoverflow上发现个神奇的语法糖,于是拿来用了,爬教务网仅花代码30行左右)
7、善用工具
不说太多,IDE用Pycharm就不错,抓包fiddler,数据分析BDP简单粗暴,数据库可视化Navicat等等,利用工具提高开发效率。
8、学会提问
来自知乎路人甲,很赞:如何向别人请教问题才能得到解答回复?
3)写好一篇博客
1、明确主题
2、突出亮点、有自己的想法
建立在做好项目的基础上,不赘述。
3、充实内容
需要准备好各种材料。
4、逻辑清晰
我一般采用“总分总”模式,分点展开,文末最后简要总结。觉得这样不仅仅逻辑清晰,也可以锻炼自己归纳总结的能力,同时查找的时候也非常方便:D
5、语言鲜明
哈哈这一点上我可能是假的段子手→_→
但,还是建议严肃一点来写技术文,毕竟,抖机灵也是要看天赋哒:D (逃~
6、尊重版权
引用别人的东西,最好注明来源、作者。
7、产品意识
这一点最初是在彭老师的文章里看到的,很有意思(目前找不到了orz),大概意思是:如何最小化的代价做出一个东西,如何扩展形成一个系列体系?
其实与爬虫学习路线设计紧密相关,形成体系后也益处多多,若一个完整的知识体系,复习起来基本不费力?
三、总结反思
1、不足之处
首先基础存在很大漏洞,才发现其实前面爬虫中,根本就不需要多少python知识的,基本的数据结构、文件操作、类与模块、函数和面向对象都差不多了。到了Scrapy这一块,装饰器初露水面,各种中间件写起来就费力了,目前恶补基础中。
其次是浮躁,感觉是没有以前静的下心,是因为夏天到了还是进阶本来就麻烦?
最后说一下,爬虫真的是上手快精通难,越到后面需要考虑的东西就越多,爬与反爬之间的博弈愈发强势,做一个项目花时间越来越多了,挺累。
2、进阶的一些想法
肯定得先补好基础啦,然后分布式希望月底之前拿下来,暑假想学flask搭个博客,之后还想学算法(貌似时间不够用啊(゚Д゚)ノ)
四、我的爬虫博客系列
前两天有位大神在简书下写了评论,很庆幸与其交流了一下,大神的建议很有用,同时也愈发感觉进阶之路漫漫。
之后,居然有人说我的博客越来越成体系了,很惊讶。这一说还真萌生了将其扩充成一个体系的想法,然后就是下面这样:
分四个阶段:
入门篇、框架篇、进阶篇、源码分析篇
<入门篇>
2、百度贴吧
7、拉勾网爬虫(一)
<框架篇>(部分待探索学习)
主要介绍Scrapy
3、Scrapy爬多级网页及图片(ImagesPipeline)
6、Scrapy之代理ip、ip池
7、Scrapy之Cookies、Cookies池
9、Scrapy-redis构建简单分布式
10、Scrapy-redis较复杂的分布式
<进阶篇>(待探索学习)
1、多线程
2、多进程
3、多线程+多进程
4、selenium、PhantomJS破解JS网页
6、验证码破解
7、视频类爬虫系列
8、大规模电商爬虫系列(淘宝|京东|亚马逊)
9、自己开发个分布式爬虫框架(难)
10、写可视化的爬虫(难)
<源码分析篇>(待探索学习)
1、Scrapy源码分析
2、requests源码分析等等
(以上也只初步构想,不能保证完全完成)
按顺序学习,点亮到进阶篇倒数第三个,应该可以找得到工作了吧?
若如期找到工作,会不会很幸福呢
五、最后的总结
不得不说,学习爬虫真的很真像升级打怪。需要我们不断对自己提需求,解决掉一个又一个问题后,提升自信心。整个过程涵盖解决问题、总结归纳、表达展现、形成系列等环节,但其实深入思考,发现最终都可以归结为一个思维方式的终极问题。
面对一个问题,如何定位有效资源,如何快速熟悉一个领域,如何制定初步方案,如何解决执行中出现的问题,如何不断优化、维护并打造一款产品系列......这些思维方式,其实是放之四海而皆准的。
惯用总结套路就不来了,放个图
16篇文章,一个爬虫系列,一篇总结文,加一个思维导图。勉强算有理有据,逻辑清晰?算不算对python表了个白?
如果这都不算爱
那我
我就
就
就
。
。
。
。
。
。
。
。
。
。
抖个机灵吧~
(实打干货没人看,抖个机灵千百赞?)
总是套路留人心啊~
都让一下,我要放大招了,哼~
表白文艺范,怎能少了诗?不说了,总之
路漫漫其修远兮,吾将上下而爬虫
洛阳亲友如相问,唯有python在心中