您的位置:首页 > 理论基础 > 计算机网络

手把手,脚把脚地教你实现网络爬虫程序(上)

2017-06-10 18:45 344 查看


说到

网络爬虫,然而它并不是一种爬虫~

而是一种可以在网上任意搜索的一个脚本程序。

有人说一定要解释网络爬虫到底是干毛用的。 尝试用了很多种解释,最终归纳为一句话:

“你再也不必用鼠标一条一条从网页上拷贝信息!”

一个爬虫程序将会高效并且准确的从网上拿到你希望要到的所有信息,从而省去你的以下行为:



当然网络爬虫的真正意义不仅如此,由于它可以自动提取网页信息,使他成为了搜索引擎从万维网上下载网页的重要利器。

下面我们来介绍一下网络爬虫的正经定义。

一、网络爬虫的定义: 

            

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

(以上定义来源于 百度百科,凑合理解吧~)

网络爬虫(web Spider),Spider是蜘蛛的意思,实际上名字是很形象的,他们把互联网比喻成一个蜘蛛网,那么所谓的这个spider就在网上爬来爬去。这个网络蜘蛛是通过网页的链接地址来寻找网页的。

蜘蛛的主要行径:  网页首页--->读取网页内容--->找到网页中其他的链接地址--->其他网页的首页--->......

这样的循环下去,直到将这个网站上所有的网页都吃光(网页上所有的信息全部用蜘蛛得到)。

如果你敢把互联网比喻成一个网站,一定会有那么一个网络蜘蛛能够可以把整个互联网的资源全部吃光!!!

ok,那么显而易见,网络爬虫的基本操作就是抓取网页。网页地址就是一个叫URL的东西,那么我们先要简单处理一下URL。

二、URL初步概念

我们先来介绍一下浏览网页的基本过程。

比如我们在浏览器的地址栏输入  http://www.itheima.cn  (广告又见广告...黑马又见黑马...)

整个过程大致会发生以下步骤:
1.本地浏览器(客户端)     --------请求------->  传智服务器(服务端)

2.本地浏览器(客户端)    <-------文件数据----  传智服务器(服务端)

3.本地浏览器(客户端)  进行解析文件数据并且展现。                     

那么实际上浏览器用的是一种叫html标记的语言来进行解析的。(具体学习网站点我)

ok,那么到底谁是URL呢,说了半天, http://www.itheima.cn 它!就是URL!没错,就是它!

我们给浏览器输入的地址,实际上就是一个url(Uniform Resource Locator)统一资源定位符。就是地址啦,搞学术的人非得弄的很高端。

明明是高利贷,他们非得说成p2p,明明是算命的,他们非得说成分析师~

URL的一般格式是: protocol :// hostname[:port] / path / [;parameters][?query]#fragment 

基本上是由三部分组成:

协议(HTTP呀,FTP呀~~等等)

主机的IP地址(或者域名)

请求主机资源的具体地址(目录,文件名等)

其中第一部分和第二部分用 "://" 分割

第二部分和第三部分用 "/"  分割

1://2/3  ----->  http://www.itheima.cn/channel/teacher.shtml#ac

下面看几个URL例子:
http://xianluomao.sinaapp.com/game   其中协议http,计算机域名xianluomao.sinaapp.com, 请求目录game
http://help.qunar.com/list.html 其中协议http,计算机域名help.qunar.com 文件list.html

网络爬虫的主要处理对象就是类似于以上的URL,爬虫根据URL地址取得所需要的文件内容,然后对它进一步的处理。

三、python与urllib2

现在迫不及待已经想要尝试一下url和网络爬虫的配合关系了。说道编程我们必须采用一种编程语言。这里我们选择的是python,python的可移植性和精炼简洁的特征无疑是跨平台脚本的最好语言选择。

“如果有的兄弟对于python还不是很了解,后续我会出一份有关python的帖子让大家系统的了解下”(敬请期待)
但是如果你已经掌握了一门主流语言(C、C++、java、C#、oc)等,那么你大可以不必要特意去学python,用的时候看看即可。

我们这里使用的是:python2.7.x 版本,就是2.7之后的版本,Python3的改动略大,这里不用它。

我们上一节已经介绍过,爬虫就是把URL地址中的网络资源读取出来,然后处理(保存到本地,或者打印等等)

当然我们可以通过鼠标和浏览器来干这件事,但是如果落实到代码上改如何处理之呢?

这时候就出来一个组件:  urllib2  。这个哥们是Python获取URL的一个组件。

Quit Easy! 最简单的获取一个url的信息代码居然只需要4行! oh no!

我们首先创建一个urllib2_test01.py ,然后输入以下代码



执行写的python代码,python urllib2_test.py 会看到以下结果。



实际上,如果我们在浏览器上打开百度主页, 右键选择“查看源代码”,你会发现,跟我们刚才打印出来的是一模一样。也就是说,上面的4行代码就已经帮我们把百度的首页的全部代码爬了下来。

我们来分析一下上面的这4行代码:

首先



没什么说的,就是将urllib2组建引入进来,供给我们使用。



然后调用urllib2库中的urlopen方法,该方法接受一个url地址,然后将请求后的得到的回应封装到一个叫response对象中。

然后 调用response对象的read()方法,将请求的回应内容以字符串形式给html变量。

最后的print html就是将字符串打出来。

所以说一个基本的url请求是对应的python代码是非常简单的。

当然还有第二种写法,先通过将一个url地址
转换成一个Request请求对象,再将Request请求对象作为参数传递给urlopen方法。



 

但是这样直接用python的urllib2给一个网站发送请求的话,确实略有些唐突了,就好比,人家每家都有门,你以一个路人的身份直接闯进去显然不是很礼貌,有可能对于有的网站会拒绝你的请求。

所以我们就应该给我们的这个代码加上一个身份,就是所谓的User-Agent头。

what?这是个什么鬼?显然如果你不是学习前端专业的,这个东西确实对于C或者后端开发工程师是一个头疼的东西,不过不要紧,不是我们的东西我们只作为了解即可。

我只需要告诉你一句话,就是你用不同的浏览器在发送请求的时候,会有不同的User-Agent头。

浏览器就是世界上被允许的身份。那么如果你不想你的爬虫代码成为一个路人,你需要伪装成一个被公认的浏览器。

伪装的办法当然就是给自己的请求加上一个对应的User-Agent头啦。



哈哈~~以上就是url的一个基本的操作,那么如果你想实现一个简单的爬虫,这些就足以了。但是如果你想深入去了解urllib2的其他操作,显然这个教程满足不了你,你可以去寻找一些其他相关教程。

我们下一节继续介绍有关urllib2的知识,而且最后如何得到一个精简的小爬虫程序!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: