1 网络爬虫是何物?
说到网络爬虫,然而它并不是一种爬虫~
而是一种可以在网上任意搜索的一个脚本程序。
有人说一定要解释网络爬虫到底是干毛用的。
尝试用了很多种解释,最终归纳为一句话:
“你再也不必用鼠标一条一条从网页上拷贝信息!”
一个爬虫程序将会高效并且准确的从网上拿到你希望要到的所有信息,从而省去你的以下行
为:
while(no_dead)
{
寻找网页;
鼠标点击;
ctrl-c;
crtl-v;
翻页;
}
当然网络爬虫的真正意义不仅如此,由于它可以自动提取网页信息,使他成为了 搜索引擎 从
万维网上下载网页的重要利器。
下面我们来介绍一下网络爬虫的正经定义。
网络爬虫 (又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定
的规则,自动地抓取 万维网 信息的 程序 或者 脚本 。另外一些不常使用的名字还有蚂蚁、自
动索引、模拟程序或者 蠕虫 。
网络爬虫 (web Spider),Spider是蜘蛛的意思,实际上名字是很形象的,他们把 互联网 比喻
成一个 蜘蛛网 ,那么所谓的这个spider就在网上爬来爬去。这个网络蜘蛛是通过网页的链接
地址来寻找网页的。
蜘蛛的主要行径: 网页首页—>读取网页内容—>找到网页中其他的链接地址—>其他网页的
首页—>……
这样的循环下去,直到将这个网站上所有的网页都吃光(网页上所有的信息全部用蜘蛛得
到)。
如果你敢把互联网比喻成一个网站,一定会有那么一个网络蜘蛛能够可以把 整个互联网 的资
源全部吃光!!!
ok,那么显而易见,网络爬虫的基本操作就是抓取网页。网页地址就是一个叫URL的东西,
那么我们先要简单处理一下URL。
2 URL初步概念
我们先来介绍一下浏览网页的基本过程。
比如我们在浏览器地址栏输入
http://www.itcast.cn
整个过程大致会发生以下步骤:
1. 本地浏览器(客户端) ——–请求——-> 传智服务器(服务端)
2. 本地浏览器(客户端)
3. 本地浏览器(客户端) 进行解析文件数据并且展现。
那么实际上浏览器用的是一种叫html标记的语言来进行解析的。
html标记语言 :http://www.w3school.com.cn/
ok,那么到底谁是URL呢,说了半天, http://www.itcast.cn 它!就是URL!没错,就
是它!
我们给浏览器输入的地址,实际上就是一个url(Uniform Resource Locator) 统一资源定位符 。
就是 地址 啦,搞学术的人非得弄的很高端。
明明是高利贷,他们非得说成p2p,明明是算命的,他们非得说成分析师~
URL的一般格式是: protocol:// hostname[:port] / path / [;parameters][?query]#fragment
基本上是由三部分组成:
1 协议(HTTP呀,FTP呀~~等等)
2 主机的IP地址(或者域名)
3 请求主机资源的具体地址(目录,文件名等)
其中:
第一部分和第二部分用 “://” 分割
第二部分和第三部分用 “/” 分割
1://2/3 —–> http://www.itcast.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地址取得所需要的文
件内容,然后对它进一步的处理。
3 python 与 urllib2
现在迫不及待已经想要尝试一下url和网络爬虫的配合关系了。说道编程我们必须采用一种编
程语言。
这里我们选择的是python,python的可移植性和精炼简洁的特征无疑是跨平台脚本的最好语
言选择。
我们这里使用的是:python2.7.x 版本,就是2.7之后的版本,Python3的改动略大,
这里不用它。
我们上一节已经介绍过,爬虫就是把URL地址中的网络资源读取出来,然后处理(保存到本
地,或者打印等等)
当然我们可以通过鼠标和浏览器来干这件事,但是如果落实到代码上改如何处理之呢?
这时候就出来一个组件: urllib2 。
这个哥们是Python获取URL的一个组件。
我们首先创建一个urllib2_test01.py ,然后输入以下代码
import urllib2
response = urllib2.urlopen('http://www.baidu.com')
html = response.read()
print html
Quite Easy! 最简单的获取一个url的信息代码居然只需要4行!
执行写的python代码,
python urllib2_test.py
会看到以下结果。
<link><link>
e="application/opensearchdescription+xml" href="/content-search.xm
l" title="百度搜索" /><link><link><link><link>
l="dns-prefetch" href="//t2.baidu.com"/><link>
ef="//t3.baidu.com"/><link><link><link><link>
f="//b1.bdstatic.com"/>
<title>百度一下,你就知道/<title>...
实际上,如果我们在浏览器上打开百度主页, 右键选择“查看源代码”,你会发现,跟我们刚
才打印出来的是一模一样。也就是说,上面的4行代码就已经帮我们把百度的首页的全部代
码爬了下来。
我们来分析一下上面的这4行代码:
首先
import urllib2
没什么说的,就是将urllib2组建引入进来,供给我们使用。
response = urllib2.urlopen('http://www.baidu.com')
然后调用urllib2库中的urlopen方法,该方法接受一个url地址,然后将请求后的得到的回应封
装到一个叫response对象中。
html = response.read()
然后 调用response对象的read()方法,将请求的回应内容以字符串形式给html变量。
最后的print html就是将字符串打出来。
所以说一个基本的url请求是对应的python代码是非常简单的。
当然还有第二种写法,先通过将一个url地址转换成一个Request请求对象,再将Request请
求对象作为参数传递给urlopen方法。
import urllib2
req = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(req)
my_page = response.read()
print my_page
但是这样直接用python的urllib2给一个网站发送请求的话,确实略有些唐突了,就好比,人
家每家都有门,你以一个 路人 的身份直接闯进去显然不是很礼貌,有可能对于有的网站会
拒绝 你的请求。
但是如果我们用一个合法的身份去请求别人网站,显然人家就是欢迎的。
所以我们就应该给我们的这个代码加上一个身份,就是所谓的 User-Agent 头。
what?这是个什么鬼?显然如果你不是学习前端专业的,这个东西确实对于C或者后端开发
工程师是一个头疼的东西,不过不要紧,不是我们的东西我们只作为了解即可。
我只需要告诉你一句话,就是你用 不同的浏览器 在发送请求的时候,会有不同的 User-
Agent 头。
浏览器 就是世界上 被允许的身份 。那么如果你不想你的爬虫代码成为一个路人,你需要伪装
成一个被 公认的浏览器 。
伪装的办法当然就是给自己的请求加上一个对应的User-Agent头啦。
我们编辑urllib2_test03.py
import urllib2
#我们要请求的url地址
url = "http://www.baidu.com"
#我们要伪装的浏览器user-agent头
user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Tr
ident/5.0;' #IE 9.0
#创建一个字典,使请求的headers中'User-Agent':对应我们user_agent字符串
headers = {'User-Agent':user_agent}
#新建一个请求,需要将请求中的headers变量换成我们刚才创建好的headers
req = urllib2.Request(url, headers = headers)
#请求服务器,得到回应
response = urllib2.urlopen(req)
#得到回应的内容
the_page = response.read()
#将内容打到屏幕上
print the_page
以上就是url的一个基本的操作,那么如果你想实现一个简单的爬虫,这些就足以了。但是如
果你想深入去了解urllib2的其他操作,显然这个教程满足不了你,你可以去寻找一些其他相
关教程。
我们下一节继续介绍有关urllib2的知识,而且最后如何得到一个精简的小爬虫程序!
閱讀更多 測試幫日記 的文章