浅谈一种基于http的网络蜘蛛实现

上传人:bao****ty 文档编号:117416804 上传时间:2019-12-05 格式:DOC 页数:111 大小:151KB
返回 下载 相关 举报
浅谈一种基于http的网络蜘蛛实现_第1页
第1页 / 共111页
浅谈一种基于http的网络蜘蛛实现_第2页
第2页 / 共111页
浅谈一种基于http的网络蜘蛛实现_第3页
第3页 / 共111页
浅谈一种基于http的网络蜘蛛实现_第4页
第4页 / 共111页
浅谈一种基于http的网络蜘蛛实现_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《浅谈一种基于http的网络蜘蛛实现》由会员分享,可在线阅读,更多相关《浅谈一种基于http的网络蜘蛛实现(111页珍藏版)》请在金锄头文库上搜索。

1、浅谈一种基于HTTP的网络蜘蛛实现 1 HTTP1.1基本概念HTTP协议,即超文本传送协议(HTTP-Hypertext transferprotocol),定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器、从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。1.2特点HTTP协议的主要特点可概括如下:(1)支持客户/服务器模式。(2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径、请求方法常用的有CET, HEAD,

2、 POST、每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。(3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记、(4) HTTP 1.1使用持续连接:不必为每个Web对象创建一个新的连接,一个连接可以传送多个对象。(5)无状态:HTTP协议是无状态协议、无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。1.3请求类型HEAD一向服务器索要与CET请求相一致的响应,只不过响应体将不会被返回。这一方法可以

3、在不必传输整个响应内容的情况下,就获取包含在响应消息头中的元信息。CET一向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web App.中、其中一个原因是GET可能会被网络蜘蛛等随意访问。POST一向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或己有资源的修改。PUT一向指定资源位置上传其最新内容。DELETE一请求服务器删除Request-URI所标识的资源、 客户端向服务器发送一个请求,服务器以一个状态行作为响应,响应的内容包括:消息协议的版本、成功或者错误编码、服务器信息、实体元

4、信息以及必要的实体内容。根据响应类别的类别,服务器响应里可以含实体内容,但不是所有的响应都有实体内容。2网络蜘蛛2.1基本概念网络爬虫又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。2.2工作原理和关键技术网络爬虫从一个或若干初始网页开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统设定的停止条件。所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。(1)对抓取目标的描述或定义;对抓取目标的描述可分为基于

5、目标网页特征、基于目标数据模式和基于领域概念3种。(2)对网页或数据的分析与过滤;通常需要用到html解析或正则分析技术。(3)对URL的搜索策略。网页的抓取策略可以分为深度优先、广度优先和最佳优先3种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。3 Python实现网络蜘蛛实例Pvthon中实现网络蜘蛛需要用到两个关键技术:http访问及正则表达式。3.1 HTTP访问安装httplib2包,访问程序如下:import httplib2#获取HTTP对象h =httplib2.Http()#发出同步请求,并获取内容resp, content

6、 = h.request(“http:/ resp #resp是http应答头print content #content是http应答内容3.2正则抽取网页中的所有urlimport rem1=re.findall(r”'<a.*?href=”(http:/>”“,body)3.3完整例子如下#一*-encoding: utf-8一*一#导入模块import sysimport httplib2import re#定义spider类class Spiderobject):#要爬的url和层数def_ init_(self,url,level):self.du=self.u

7、rl=urlself.level=Ievelself.crawl(self.url,self.level,1)#单个请求处理函数,输入为请求url ,输出为网页标题,网页#响应长度,网页url,字符集和网页内容def doGetlself,url):try:#获取HTTP对象h =httplib2.HttpOprint “begin to get %s” %urlheader, body=h.requestlurl,redirections=1)#print headertitle=“charset=“utf-8”m=re.searchlr'',body)“content-ty

8、pe”)if m:charset=m.groupl1)if m:title=m.groupl1)m=search (r'text/html;s*charsets*=1.*)”,headerif m:charset=m.groupl1)return title,header'content-length',url,charset,bodyexcept Exception,e:punt ereturn “,”,”,”,”#开始爬ur对应的网站,深度为(eve) , cur为当前层数def crawllself,url,level,cur):name,length,url,c

9、harset,body=self.doGetlurl)self.ducur=Iname,length,url,charset)while cur cur=cur+1self.ducur=#解析当前网页的所有超链接m1=re.findall(r”'<a.*?href=”(http:/ref=”(http:/name,length,url,charset,body=self.doGet(next)if len(length)> 0:self.ducur.append(name,length,url,charset)Spider('http:/',2)4结结通过h

10、ttplib2库访问远程网站,得到网页内容后采用正则表达式解析其中所有符合规则的超链接,然后采用广度优先遍历的方法进行下一层网页内容的抓取,直到抓取的网页达到最大的层数,通过这个例子,实现了一个最基本的网络蜘蛛程序。 lt;>*?)”.*?>(name,length,url,charset,body=self.doGet(next)if len(length)> 0:self.ducur.append(name,length,url,charset)Spider('http:/',2)4结结通过httplib2库访问远程网站,得到网页内容后采用正则表达式解析其

11、中所有符合规则的超链接,然后采用广度优先遍历的方法进行下一层网页内容的抓取,直到抓取的网页达到最大的层数,通过这个例子,实现了一个最基本的网络蜘蛛程序。 lt;>*?)</a>”“,body)#继续往下遍历self.doNext(m1,cur)self.doNext(lm2,cur)#访问当前网页下所有的超链接def doNext(self,m,cur):for item in m:next=item0name,length,url,charset,body=self.doGet(next)if len(length)> 0:self.ducur.append(name

12、,length,url,charset)Spider('http:/',2)4结结通过httplib2库访问远程网站,得到网页内容后采用正则表达式解析其中所有符合规则的超链接,然后采用广度优先遍历的方法进行下一层网页内容的抓取,直到抓取的网页达到最大的层数,通过这个例子,实现了一个最基本的网络蜘蛛程序。 lt;>*?)”.*?>(ref=”(http:/name,length,url,charset,body=self.doGet(next)if len(length)> 0:self.ducur.append(name,length,url,charset)Spider('http:/',2)4结结通过httplib2库访问远程网站,得到网页内容后采用正则表达式解析其中所有符合规则的超链接,然后采用广度优先遍历的方法进行下一层网页内容的抓取,直到抓取的网页达到最大的层数,通过这个例子,实现了一个最基本的网络蜘

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号