前言
这篇文章主要是介绍什么是网络爬虫,以及网络爬虫有什么作用,我学网络爬虫当时也是因为兴趣才学的,总感觉这东西很神奇有趣。并且学习爬虫也并不是很长时间,所以会以一个小白的口吻来介绍网络爬虫。这篇文章可以作为学习爬虫前的一个了解知识。
什么是爬虫
**爬虫**又名网络爬虫、网页蜘蛛、网络机器人等等。我们都知道互联网的逻辑雏形就是像蜘蛛织的网一样,那么网络爬虫就是一个通过程序编程好之后自己在网络中获取资源的小虫子。
举个生活常见的用到爬虫的例子。
大家在生活中应该都用过各种各样的抢票软件,大家都知道火车票、飞机票、高铁票等。都是12306发售的,那么这些软件又是怎么获取到的呐,其实这之间就用到了爬虫技术,首先这些软件从12306服务器上爬取票务信息,然后展示到自己的软件中。这也就说当你学习爬虫之后也许就可以自己写一个抢票的程序了。
产生的原因
网络爬虫为什么会出现?说是实在的出现爬虫主要是因为一个字—懒,为什么这么说呐,因为懒是推动人类发展的主要动力。
哈哈,上面是调侃 ,实际上网络爬虫的出现,是为了让人们你能够在互联网上,很快获取自己需要的资源。互联网自产生到当前的发展速度是相当迅速的额,随着增长的可不单单是用户量,还有那庞大用户所产生的数据。那么在这么庞大的数据中如和快速的获取到你想获取的数据那,有人该说的可以用搜索引擎了,当然,这是我们大多数普通用户采用的方式什么Google、百度···等等。但是这写搜索引擎搜索出来的数据有许多并不是我们像要的,也就是所谓的泛搜索,没有针对性。而且如果搜索的数据量较大,就会徒增许多的工作量。为了解决这个问题爬虫程序就被发明出来了。爬虫可以有针对性的获取用户想要的资源,同时页解放了劳动力。
爬虫的工作原理
上面大概介绍了一下爬虫,那么爬虫的工作原理和流程又是怎么样那?
我们首先通过下面这张图来看一下。
这张图是一般爬虫的工作模式,首先任何爬虫都会有一个目标数据,也就是你写这个程序的目的,这个程序要爬取什么内容。我么从上向下解读一下这张图。
最上面是初始URL(后由标注),什么是初始URL就是你的要获取数据的范围,举个例子,就好像你毕业之后要去找工作,你首先可定会确定一个工作范围。比如说你去定去郑州工作,那么郑州就是你的初始URL。
之后进入替代URL,这一步在岗开始第一次运行时是不会是做任何动作的,所以说着时的URL依然是我们刚开始的初始URL。
然后进入到网页解析,着是至关重要的一步,因为你要获取的数据也就在这一步被识别出来的,同时他会获取网页中的URL,获取URL的作用是为了防止数据存在多个网页中,比如你在网页上看的小说漫画会有翻页的操作,其实当你点击翻页或者是滑动过滚轮的过程就是获取新的网页的过程。
在解析完网页后就会出现两种操作,一种是将从网页中获取的数据存储起来。另一步是判断的获取到的URL是否有效,如何判断URL是否有效那,其实同一类型的网页的链接都有各自的特点,我们就可以通过这些特点来区别获取到的URL,是否有效是否需要获取其中的数据。判断完成很后,就可以进行替换URL了,这时候,我们将按照刚才的流程继续分析刚刚获取的数据,循环往复。直到所有数据都存入数据库,没有新的URL了,程序就会自动结束。当然也可以更具个人需求控制获取数据的数量。
注:URL网页链接,就好像我们的家庭地址一样,每个网页也都有自己的网页地址,我们的浏览器就是通过这个地址从对应的服务器上获取网页在返回到我们的个人电脑上的。
爬虫程序为什么要用Python编写
可以编写爬虫的的语言有许多,如JAVA、PHP、Python、c#其实都是可以进行爬虫程序的编程的。
其实用什么语言还是需要看情况,分主要的目的的。
如果是定向爬取,且主要目标是解析js动态生成的内容,此时候,页面内容是有,js/ajax动态生成的,用普通的请求页面->解析的方法就不管用了,需要借助一个类似firefox、chrome 浏览器的js引擎来对页面的js代码做动态解析。此种情况下,推荐考虑casperJS + phantomjsslimerJS+phantomjs,当然,诸如selenium之类的也可以考虑。
如果爬虫是涉及大规模网站爬取,效率、扩展性、可维护性等是必须考虑的因素时候,大规模爬虫爬取涉及诸多问题:多线程并发、l/O机制、分布式爬取、消息通讯、判重机制、任务调度等等,此时候语言和所用框架的选取就具有极大意义了。
PHP对多线程、异步支持较差,不建议采用。
NodeJS:对- -些垂直网站爬取倒可以,但由于分布式爬取、消息通讯等支持较
弱,根据自己情况判断。
Python:强烈建议,对以上问题都有较好支持。尤其是Scrapy框架值得作为第一选择。
那么为什么还那么多人推荐用Python编程呐,那肯定是python有自己的优势的。python有丰富的库函数,对于开发者而言这真是再好不过了。开发者可以直接调用着些库使用,而不用考虑是怎么实现的。也就是用python编程爬虫,大多考虑的整体爬虫程序的逻辑思路,而无需考虑其中的细节。这对开发者来说减轻了不小的负担。同时随着python在人工智能和大数据方面的运用越来越广泛,爬取的数据可以直接通过python进行清洗处理。同时以下也是推荐Python的原因。
1)抓取网页本身的接口
相比与其他静态编程语言,如java, c#, C++, python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl, shell, python 的urllib2包提供了较为完整的访问网页文档的API。(当然 ruby也是很好的选择)。
此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests, mechanize
2)网页抓取后的处理
抓取的网页通常需要处理,比如过滤html标签,提取文本等。python 的beautifulsoap 提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。除了这些,还有很多优点:支持xpath;基于twisted,性能不错;有较好的调试工具;
此种情况下,如果还需要做js动态内容的解析,casperjs 就不适合了,只有基于诸如chrome V8引擎之类自己做js引擎。
至于C、C++虽然性能不错,但不推荐,尤其是考虑到成本等诸多因素;对于大部分公司还是建议基于一些开源的框架来做, 不要自己发明轮子,做一一个简单的爬虫容易,但要做一个完备的爬虫挺难的。
如何开始学习爬虫
这里需要讲一讲我学习爬虫的过程,我是在大二学完python后,一个偶然的机会了解到了爬虫,然后我就对爬虫产生了浓厚的兴趣,心想这东西要是学会了一定会很有趣,当时想的学会后们就可以在网上批量爬取图片、电影、音乐···等等。然后放假后就给自己指定了学习计划。在bilibili哔站上找了一个爬虫的视频,边看视频边练习做电子笔记。就这样看完之后就感觉有点入门了。基本的网页爬虫已经能够自己进行编写了。然后就开始学习框架爬虫Scrapy,目前虽不能说精通scrapy的编程,但是也可以使用框架编写爬虫了。
这里说上面我的学习历程并不是说这种方法好,只是说兴趣和坚持很重要。要多做笔记和练习。
这里我就大概说以下我认为的学习方法。如果有python基础,可以首先了解下requests 、Urllib等几个库,最好是在哔站找一个视频看着练习学习。其次学习爬虫还要掌握正则表达式对应的库是re。爬虫中用到的库还有很多,这需要你自己在学习中慢慢发掘。
对于没有python基础的来说,首现要了解python语言的编程特点,然后在逐步了解上面所说的库。
其实,学习这件事,主要还是看自己,加油。大家一起努力!
END!!!