欢迎来到天天文库
浏览记录
ID:13382075
大小:151.00 KB
页数:111页
时间:2018-07-22
《浅谈一种基于http的网络蜘蛛实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、浅谈一种基于HTTP的网络蜘蛛实现 1HTTP 1.1基本概念 HTTP协议,即超文本传送协议(HTTP-Hypertext浅谈一种基于HTTP的网络蜘蛛实现 1HTTP 1.1基本概念 HTTP协议,即超文本传送协议(HTTP-Hypertexttransferprotocol),定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器、从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种
2、多媒体文件)的重要基础。 1.2特点 HTTP协议的主要特点可概括如下: (1)支持客户/服务器模式。 (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径、请求方法常用的有CET,HEAD,POST、每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记、 (4)HTTP1.1使用持续连接:不必为每个Web对象创建一个新的连接,一个连接可以传送多个对象。
3、 (5)无状态:HTTP协议是无状态协议、无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。 1.3请求类型 HEAD一向服务器索要与CET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就获取包含在响应消息头中的元信息。 CET一向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在WebApp.中、其中一个原因是GET可能会被网络蜘蛛等随意访问。 POST一向指定资源提交数据
4、进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或己有资源的修改。 PUT一向指定资源位置上传其最新内容。 DELETE一请求服务器删除Request-URI所标识的资源、客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有的响应都有实体内容。 2网络蜘蛛 2.1基本概念 网络爬虫又被称为网页蜘蛛,网络机器人,是一种按
5、照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。 2.2工作原理和关键技术 网络爬虫从一个或若干初始网页开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统设定的停止条件。所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。 (1)对抓取目标的描述或定义; 对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。 (2)对网页或数据的分析与过滤; 通常需
6、要用到html解析或正则分析技术。 (3)对URL的搜索策略。 网页的抓取策略可以分为深度优先、广度优先和最佳优先3种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。 3Python实现网络蜘蛛实例 Pvthon中实现网络蜘蛛需要用到两个关键技术:http访问及正则表达式。 3.1HTTP访问 安装httplib2包,访问程序如下: importhttplib2 #获取HTTP对象 h=httplib2.Http() #发出同步请求,并获取内容 resp,cont
7、ent=h.request(“http://www.baidu.com/”)#请求百 #度首页 printresp#resp是http应答头 printcontent#content是http应答内容 3.2正则抽取网页中的所有url importre m1=re.findall(r”'<a.*?href=”(http://[> ”““,body) 3.3完整例子如下 #一*-encoding:utf-8一*一 #导入模块 importsys importhttplib2 importre
8、 #定义spider类 classSpider]object): #要爬的url和层数 def_init_(self,url,level): self.du={} self.url=url self.lev
此文档下载收益归作者所有