1、爬虫的核心是什么?

一直以来,对爬虫技术很关注,自己闲来无事,也写一些爬虫。很多python初学者,将爬虫定 自己的发展方向,但学习方法上,我认为有待商榷。

鄙人愚见,爬虫最关键,最核心的不是如何写程序,而是分析网站。而分析网站用到的则不是python的知识,分析网站所需要的技术包括且不局限于下面这些技术:

  1. html。
  2. javascrip。
  3. socket。
  4. http协议。
  5. 网络分析工具,例如谷歌浏览器的开发者工具。

前面的分析工作做完了,才轮到python上场,python要解决的,是用代码实现抓取的过程,而抓取的过程,数据的定位则完全依靠前面的分析工作。

最后,抓取到的数据要落库,要保存到数据库中,这里又涉及到数据库。

2、 解决速度问题。

如果你幸运的解决了网站的分析工作和程序编写,那么接下来,你可能要面对速度问题。

需要抓取的数据实在是太多了,你的程序不堪重负。这时,你要采取措施,提高抓取速度。

首先要考虑的是多线程技术,尽管python由于GIL锁的存在导致无法有效利用CPU的多核优势,但网络IO是阻塞的,因此,多线程在这个场景下是可以提高效率的。

如果多线程依然无法满足要求,可以使用多进程加多线程,如果依然无法满足速度,则可以考虑分布式,用更多的机器进行爬取。

3、解决反爬机制。

大家都知道数据的重要性,所以,大点的网站,不会把数据放在那里,任由你抓取的,他们会采取多种反爬的机制,这是我认为爬虫技术中最难的部分,不信的话,你可以去尝试抓取一下淘宝的商品信息。

普通的反爬,很容易就绕过了,如果遇到封IP的情况,可以使用IP代理。

如果遇到了验证码,则可以有针对的写验证码破解程序,但有些网站的验证码,实在是难以破解,比如滑动鼠标拼图的那种。

4、 关于爬虫框架。

爬虫框架并不适合初学者,这是我的个人观点。不只是爬虫框架,包括web框架例如flask,django,我认为,都不适合初学者。我为什么这么说呢?原因就在于,如果你一上来就扑向各种框架,那么你只能学会皮毛,我不否定皮毛的作用,但如果你想成为真正的高手,你就必须关注底层的东西,底层的东西,就是我前面讲到的html、javascript、socket、http协议。

我最初写爬虫时,只用requests 和 lxml 这两个模块,没有任何问题,所以,如果你是初学者,我建议你从基础的,简单的事情做起,当你有能力做网站分析,有能力设计程序时,再去学习爬虫框架,那个时候,事半功倍。

打开网易新闻 查看精彩图片