python分享中初级爬虫教程泛滥是否有其语法特征和生态环境的锅?

python分享中爬虫这一块的分享泛滥已经是不争的事实了,而且大部分都是静态爬虫,用到ajax的都很少,涉及到并发和异步的几乎没有。这一现象有没有可能是因为语法简洁,入门门槛低,各种第三方库使用方便导致的。 requests库,由小胖墩变大帅哥的kennethreitz开发,号称HTTP for Humans,简洁好用。 Beautiful Soup库,将烦人的lxml解析转变为面向对象的方式。 scrapy库,连原理都不用搞清楚就可以获得一个相对高性能的爬虫。 其…
关注者
406
被浏览
66174

其实一开始就有同学邀请我回答,昨天 @Manjusaka 提到了我,本来我就想来点点赞就算了,结果在床上刷了会知乎,又刷出来3篇爬虫文章和一篇某本爬虫新书的推广内容,心情不好,来说说我的分析和理解,想直接看结论的跳到第四点。

1. 为什么python分享中爬虫这么泛滥?

Google、百度这种搜索引擎的爬虫是c++写的,为什么大家说爬虫以Python居多,鲜有人分享c++版本的文章?

第一个点就是题主谈到的语法特性。Python是一个非常「高级」的语言,它表达能力很强,语法简单,非常易学和理解。一般有其他语言基础的同学一个礼拜就可以用于工作,编程小白通过看书、动手实践1-2个月就可入门。我想10个自学的人中有8个可以坚持下来。如果是学c++呢?10个人里面能有一个坚持下来的就不错了!不信来试试。

高级的语言很好,框架也很好,比如用Flask或者Django能让一个初学者很快的做出一个像样的网站;用Scrapy之类的爬虫框架可以让爬虫小白10分钟实现一个抓取豆瓣的程序;用Celery可以让一个对后端架构了解甚少的同学运行起一个分布式的抓取集群...

Python是一个非常容易让人YY和产生幻觉的语言:好像用Python写个小脚本就已经会编程,是一个程序员了,成就感爆棚的感觉好好啊,对吧。尤其是有些无良的、别有用心的培训机构和自媒体吹嘘引导,让很多人感觉花1-2个月就可以迎娶白富美,走向人生巅峰了。这就是智商税

昨天看到了tombkeeper老师一段话:

“知识付费”有两种:一种是让你学到知识,一种是让你以为学到了知识

好吧,我那个爬虫的5.0星Live应该是第一种,其他的培训我就不知道了。

我开个Live只敢叫做「爬虫从入门到进阶」,不敢用「精通」,最多叫做「熟悉」。反正这年代吹牛逼也不上税,打个脸可以道歉,谁有能力谁上吧,环境就是这样。

第二点生态环境。只要是图灵完备的语言都可以实现爬虫功能。Python为啥看起来「更」适合写爬虫呢?

1. 从HTTP请求、HTML解析、并发编程、异步编程到动态网站抓取方案等方面都有非常好用的库。回答楼主的问题,其他语言也都有一些对应的库,只是没有Python这些库知名和好用罢了。

2. 良性循环,爬虫技术分享文章很多,非常利于新人学习爬虫技能。

3. Python是一个胶水语言,在不同领域都有涉猎并且做的都还不错,这个生态可以让大家学一门语言干多得多的事情,其他语言在这方面都没有Python有优势。

2. 为什么最近爬虫分享变多了?

爬虫是种很古老的技能,知乎也都6年了。为什么最近才泛滥?

1. 从微信公众号到去年知乎Live、知乎专栏、分答、值乎,再到上段时间的小密圈,知识变现已经被验证成立。我的书在知乎做宣传就是一个成功的例子(此处我的脸大了一些),大家看到了机会,各路英豪蜂拥而至。

2. 一些公司和营销号转战知乎,小白钱最好骗,人家本来也没想挣真的是这个行业圈子里面的人的钱。没事大家关注一下,有些文章明显不是个人发的,Python是很讲究语法和缩进的,不熟悉Python很多例子根本跑不起来,你们有没有发现有些文章的代码都是图片?虽然知乎的编辑器提供的代码语法高亮功能很一般,但是我非常怀疑这些文章是编辑的精选,这样既好看,也不会出现代码格式问题,对于非技术人员很友好呢。

3. 分享者希望获得更多关注和鼓励。很多同学没有个人博客,知乎也是一个好的选择。以前有点技术底子的同学都会选择个人博客,至少托管在github。蒙头在一个角落写博客除了友链和有人主动搜索以外不容易被人看到,久而久之就容易放弃。现在很多同学包括我都开始顺应时代,出来营销和互动了,也有开发者头条这种技术分享平台,我当然欢迎更多的同学选择这种不寂寞的方式来做分享。

4. 想做分享的同学受限于技术能力,很尴尬。而爬虫是一个很简单也很容易看到效果的方式,如果有idea,还可以做一些有趣的技术分析,这都能引来大片的赞和关注,继而可以靠发软广之类的方式挣钱呢。

3. 为什么初中级教程占绝大多数?

每一个出来分享的同学都要学习下如何营销,思考下如何获得更多的曝光、收藏和关注,这是一门很大的学问。初中级教程这么吃香,我总结三点:

1. 知乎都是碎片化的浏览的特性。本来知乎是一个娱乐场所,讨论技术也不是不可以,一看就懂的那种当然最受欢迎啦。

2. 受众分布。无论哪个语言,中高级开发者都是相对很小的一拨人,你看我写的一些技术文章,大多几十赞,最多几百赞。我目前就一个超过1k赞的文章,好忧伤,剩下几百的赞的文章中大部分也不真的是纯技术类的,另外很多人觉得看的难半路就放弃了更没有点喜欢的冲动了。初级教程就不是了,有美女图,有表格,还有点不知道真的能不能跑起来的代码(反正大家大部分也不会真的去运行一下),显得「干货满满」呢?这让我们这种用心分享的人情可以堪?有些东西我又不是不会,原理就3条:追热点、吸引眼球、话题性(耐撕逼)。你看我最近出来怼人的文章,获得的赞远比真的花时间写技术分享拿到的赞多得多,这么做下去最后还能能挣得盆满钵满啊,但是这太low了,底线在哪里啊,我还得在圈子里面混,这么做了以后就让圈内人真的看不起了。

3. 初中级内容对分享者要求低,文章质量要求少,可量产。写点干货试试?我反正不敢保证三天能写出来一篇。

4. 点赞关注的同学很大程度上是小白,也就是并不是程序员,觉得有意思和难,但是这给所有爬虫分享者和我们营造了一个假象,就是爬虫类文章受欢迎。这是病,得治。

4. 爬虫分享泛滥是不是Python的锅?

回到正题了,显然不是@xchaoinfo 说的很好:

天下熙熙皆为利来,天下攘攘皆为利往。  
杀人者罪,利刃何罪之有?

由爬虫入门Python当然是一个很好的方式,但是这不是唯一的方式。

@DCjanus 说的也很好:

爬虫入门不可怕,可怕的是停留在舒适区。

入门了别忘了继续进阶,路还很长。那些在舒适区的同学,看到本回答,不知道能不能叫醒你们,擦擦(¯﹃¯)

那锅在哪?

@laike9m 点到了正题:

归根到底是人的锅。

最坏的是整合这些爬虫文章的社区和专栏背后的拥有者

我看了很多知乎上分享爬虫文章的,有些同学确实是在分享自己的技术成长,他们把知乎专栏作为自己的技术博客,用来记录自己对爬虫这件事情的理解,我很支持。不能说大家觉得泛滥就谁也不要再发了,还是得让人说话,让人做自己的。之前有人发文对我说的乱象提出意见,我不也是没有再反驳嘛。

很多人还是需要爬虫文章尤其是经验类的内容的,大家普遍欠缺的是进阶的内容。

分享的同学也别太担心,如果你是诚心分享技术,帮助大家的,长久下来大家都是看得到的,但是别千篇一律就好,就跟吃饭一样,再好吃的东西让你连吃一个礼拜你也受不了,别说现在这每天都得吃。另外 @段小草 第4点建议说的就很好。反正美女图这种吸引眼球的无论你出于哪方面的出发点,我都不觉得这是一个好的技术作者该做的,内心是鄙视+拉黑的。

有些同学说,哎呀不让写爬虫,我没有活路了啊?

我抛砖引玉的说几点爬虫进阶的内容,欢迎大家有机会和兴趣研究下:

1. asyncio爬虫。

2. 腾讯系需要登录网站的爬虫(因为我当时写爬虫觉得QQ登录体系很难搞,虽然最后搞定了。PS:我说的是研究,不是让大家分享出来哈,也请不要用seleinum这种低技术门槛的工具)。

3. 分布式爬虫架构和实践,最好不要使用现成的Celery。虽然celery的文章也基本没有。

4. 爬虫监控和报警,能方便查看和控制抓取节点进程状态。

5. 图片验证码破解。

6. requests/urllib2/urllib3/scrapy源码分析。

7. XPath高阶用法和场景,比如正则匹配。

8. seleinum高阶用法。

顺便一想,上述的内容我非常欢迎,并且很愿意送赞。

老是爬豆瓣,真的很无聊

老是爬豆瓣,真的很无聊

老是爬豆瓣,真的很无聊

最后, @Manjusaka 说到了我最近出来说话的根本动机:

奉劝各路 “大v” 一句,事莫做绝,凡事一定要按照基本法和游戏规则来办事,吃相别太难看了,
太难看了,羊毛割太狠了,圈子搞臭了,大家都讨不了好

你们捞钱完了滚蛋了,我们还得在这个圈子混呢。各位想继续在Python圈子混的同学,你们真的以为这是我一个人的事情么?

所以某些人注意,建议换个地方去割羊毛去,否则我没事就得出来伤害下你们。各位说,对吧?